我想提取一个UWP应用程序的图标,以构建类似于“打开方式”菜单的资源管理器。
通过SHAssocEnumHandlers的帮助下,我成功地获取了与给定文件扩展名相关联的应用程序。
使用IAssocHandler::GetIconLocation时,对于UWP应用(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()
一切都很好。我没有找到任何方法来在UWP应用程序中做同样的事情。