从UWP App获取图标

Pat*_*ick 9 c# icons uwp

我想提取UWP应用的图标以构建类似“打开方式”菜单的资源管理器。

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

使用IAssocHandler :: GetIconLocation我可以通过UWP Apps(Microsoft Edge)获得类似以下信息:

@ {Microsoft.MicrosoftEdge_41.16299.371.0_neutral__8wekyb3d8bbwe?ms-resource://Microsoft.MicrosoftEdge/Files/Assets/MicrosoftEdgeSquare44x44.png}

如果我在此字符串上使用SHLoadIndirectString,则会得到:

C:\ WINDOWS \ SystemApps \ Microsoft.MicrosoftEdge_8wekyb3d8bbwe \ Assets \ MicrosoftEdgeSquare44x44.scale-100.png

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

在目录中:

C:\ WINDOWS \ SystemApps \ Microsoft.MicrosoftEdge_8wekyb3d8bbwe \ Assets \

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

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

对于非UWP应用,我得到的图标位置为:

C:\ WINDOWS \ system32 \ NOTEPAD.EXE

然后我可以使用:

Icon.ExtractAssociatedIcon()
Run Code Online (Sandbox Code Playgroud)

一切都很好。我没有找到使用UWP App执行相同操作的任何方法。

Sim*_*ier 5

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

这些 API 没有与 C# 等效的 AFAIK,但我在回答类似问题时提供了示例代码来执行此操作: 从桌面应用程序获取“现代”Windows 应用程序的图标?

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

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