代码之家  ›  专栏  ›  技术社区  ›  Patrick

从UWP应用程序获取图标

  •  11
  • Patrick  · 技术社区  · 6 年前

    我想提取一个UWP应用程序的图标来构建一个类似于“Open With”菜单的浏览器。

    借助于 SHAssocEnumHandlers 我设法将关联的应用程序获取到给定的文件扩展名。

    具有 IAssocHandler::GetIconLocation 我获得的UWP应用程序(Microsoft Edge)类似于:

    @{Microsoft.MicrosoftEdge\u 41.16299.371.0\u neutral\u 8wekyb3d8bbwe?ms-resource://Microsoft.MicrosoftEdge/Files/Assets/MicrosoftEdgeSquare44x44.png}

    如果我使用 SHLoadIndirectString 在这个字符串上,我得到:

    C: \ WINDOWS\SystemApps\Microsoft。MicrosoftEdge\u 8wekyb3d8bbwe\Assets\MicrosoftEdge Square44x44。比例-100。巴布亚新几内亚

    但这是错误的图标(没有颜色或对比度)。

    在目录中:

    C: \ WINDOWS\SystemApps\Microsoft。MicrosoftEdge\u 8wekyb3d8bbwe\资产\

    有很多不同的图像。 我不知道如何选择正确的图标。

    我试图查找“AppxManifest.xml”,但不同的应用程序看起来完全不同。

    对于非UWP应用程序,我将其作为IconLocation获取,例如:

    C: \WINDOWS\system32\NOTEPAD。EXE文件

    然后我可以使用:

    Icon.ExtractAssociatedIcon()
    

    一切都很好。我没有找到任何方法可以用UWP应用程序实现同样的效果。

    3 回复  |  直到 6 年前
        1
  •  6
  •   Simon Mourier    5 年前

    UWP应用程序(或Windows应用商店应用程序,或有时被称为“AppX应用程序模型”的应用程序)的信息可以从官方API中查询。

    这些API没有C#等效的AFAIK,但我在回答类似问题时提供了示例代码,因此: Getting icon of “modern” Windows app from a desktop application?

    示例应用程序转储所有当前加载的Windows应用商店包;应用程序。

    注意,不只是 UWP应用程序的图标可能有很多,以便能够适应特定的设备、形状因素等。示例代码有一个实用程序,用于获取给定资源的最高比例图像。

        2
  •  1
  •   user11313931 user11313931    5 年前

    对我来说,以下方法有效:

    1. 打开 文件资源管理器 和类型 C:/Program Files/WindowsApps 在地址栏中。
    2. 您没有访问此文件夹的权限 对话框单击 持续 。这需要管理员权限。
    3. 您被拒绝访问此文件夹 对话框单击 安全选项卡 以蓝色突出显示。
    4. WindowsApps属性 对话框单击 先进的
    5. WindowsApps的高级安全设置 对话框单击 持续
    6. 单击蓝色文本 改变 旁边 所有者:TrustedInstaller
    7. 输入要选择的对象名称 中的文本框 选择对象或组 对话框输入 您的用户名 (cmd中显示的一个 C:/User/ 打开后立即)。
    8. 单击 检查名称 按钮
    9. 单击 好啊 按钮
    10. WindowsApps的高级安全设置 对话框单击 申请 然后 好啊
    11. 关闭文件资源管理器
    12. 重新打开 文件资源管理器 和类型 C: /程序文件/Windows应用程序 再次在地址栏中。

    现在您将看到文件夹列表。每个对应于安装在计算机上的UWP应用程序。某些应用程序位于多个文件夹中。应用程序的资源位于 /Assets 子文件夹。你也会在那里找到应用程序的图标。

        3
  •  1
  •   Ehsan Zand    5 年前

    我想你必须把两者结合起来,

    第一次检查 AppxManifest公司。xml 并搜索 uap:VisualElements

    然后查找 Square150x150Logo 输入它,

    然后获取相关值,在给定地址中找到文件并使用它。