[英]Get Icon from UWP App
我想提取一個UWP應用程序的圖標來構建一個像“打開方式”菜單的資源管理器。
在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:\\ WINDOWS \\ SYSTEM32 \\ NOTEPAD.EXE
然后我可以使用:
Icon.ExtractAssociatedIcon()
一切都很好。 我沒有嘗試用UWP App做同樣的事情。
可以從官方API查詢UWP應用程序(或Windows應用程序應用程序,或稱為“AppX應用程序模型”的應用程序)信息。
這些API沒有C#等效的AFAIK,但我提供了示例代碼來解決類似問題的答案:SO: 從桌面應用程序獲取“現代”Windows應用程序的圖標?
示例應用程序轉儲所有當前加載的Windows應用商店包和應用。
請注意,UWP應用程序不僅有一個圖標,可能有很多,以便能夠適應特定設備,形狀因子等。示例代碼具有一個實用程序,可獲取給定資源的最高比例圖像。
對我來說,以下方法有效:
C:/Program Files/WindowsApps
。 C:/User/
后打開它后顯示在cmd中的用戶名 )。 C:/Program Files/WindowsApps
。 現在您將看到一個文件夾列表。 每個都對應於您的計算機上安裝的UWP應用程序。 有些應用程序位於多個文件夾中 應用程序的資源位於/Assets
子文件夾中。 你也會在那里找到應用程序的圖標。
我想你必須把兩者結合起來,
首先檢查AppxManifest.xml並搜索uap:VisualElements
塊,
然后找到Square150x150Logo
鍵,
然后獲取相關值並在給定地址中找到該文件並使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.