从UWP App获取图标

时间:2018-05-07 15:09:04

标签: c# uwp icons

我想提取一个UWP应用程序的图标,以构建一个类似于" Open With" menue。

SHAssocEnumHandlers的帮助下,我设法将相关的应用程序提供给给定的文件扩展名。

使用IAssocHandler::GetIconLocation我可以使用UWP Apps(Microsoft Edge):

  

@ {Microsoft.MicrosoftEdge_41.16299.371.0_neutral__8wekyb3d8bbwe MS-资源://Microsoft.MicrosoftEdge/Files/Assets/MicrosoftEdgeSquare44x44.png}

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

  

C:\ Windows \ SystemApps \ Microsoft.MicrosoftEdge_8wekyb3d8bbwe \资产\ MicrosoftEdgeSquare44x44.scale-100.png

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

在目录中:

  

C:\ Windows \ SystemApps \ Microsoft.MicrosoftEdge_8wekyb3d8bbwe \资产\

有很多不同的图片。 我不明白如何选择正确的图标。

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

对于非UWP应用程序,我得到的IconLocation类似于:

  

C:\窗口\ system32 \ NOTEPAD.EXE

然后我可以使用:

Icon.ExtractAssociatedIcon()

一切都很好。我没有用UWP App来做同样的事情。

3 个答案:

答案 0 :(得分:3)

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

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

该示例应用程序转储了所有当前加载的Windows应用商店软件包和应用程序。

请注意,UWP应用程序不仅有一个一个图标,而且可能有许多图标可以适应特定的设备,外形等。示例代码中的实用程序可以给定资源的最大比例图像。

答案 1 :(得分:0)

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

  1. 打开文件资源管理器,然后在地址栏中键入 C:/Program Files/WindowsApps
  2. 您无权访问此文件夹对话框中,单击继续。这将需要管理员特权。
  3. 您已被拒绝访问此文件夹对话框中,单击以蓝色突出显示的安全选项卡
  4. WindowsApps属性对话框中,单击高级
  5. 在“ 应用程序的高级安全设置” 对话框中,单击继续
  6. 点击所有者:TrustedInstaller 旁边的蓝色文本更改
  7. 选择对象或组对话框的输入对象名称选择文本框中,输入您的用户名(该用户名以cmd显示在C:/User/打开之后。
  8. 点击检查姓名按钮。
  9. 点击确定按钮。
  10. 在“ Windows应用程序的高级安全设置” 对话框中,单击应用,然后单击确定
  11. 关闭文件资源管理器
  12. 重新打开文件资源管理器,然后在地址栏中再次键入 C:/Program Files/WindowsApps

现在,您将看到一个文件夹列表。每个都对应于您计算机上安装的UWP应用。有些应用程序位于多个文件夹中。应用程序的资源位于/Assets子文件夹中。您还将在该处找到该应用程序的图标。

答案 2 :(得分:0)

我认为您必须将两者结合起来

首先检查 AppxManifest.xml 并搜索uap:VisualElements

然后在其中找到Square150x150Logo键,

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