我想提取一个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来做同样的事情。
答案 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)
对我来说,以下方法有效:
C:/Program Files/WindowsApps
。C:/User/
打开之后。C:/Program Files/WindowsApps
。现在,您将看到一个文件夹列表。每个都对应于您计算机上安装的UWP应用。有些应用程序位于多个文件夹中。应用程序的资源位于/Assets
子文件夹中。您还将在该处找到该应用程序的图标。
答案 2 :(得分:0)
我认为您必须将两者结合起来
首先检查 AppxManifest.xml 并搜索uap:VisualElements
块
然后在其中找到Square150x150Logo
键,
然后获取相关值,并在给定地址中查找文件并使用它。