簡體   English   中英

從UWP App獲取圖標

[英]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應用程序不僅有一個圖標,可能有很多,以便能夠適應特定設備,形狀因子等。示例代碼具有一個實用程序,可獲取給定資源的最高比例圖像。

對我來說,以下方法有效:

  1. 打開文件資源管理器 ,在地址欄中鍵入C:/Program Files/WindowsApps
  2. 您沒有權限訪問此文件夾對話框中單擊繼續 這將需要管理員權限。
  3. 在“ 您已被拒絕此文件夾的權限”對話框中,單擊以藍色突出顯示的安全選項卡
  4. 在“ WindowsApps屬性”對話框中,單擊“ 高級”
  5. “WindowsApps高級安全性設置”對話框中,單擊“ 繼續”
  6. 單擊所有者:TrustedInstaller旁邊的藍色文本更改
  7. 在“ 選擇對象或組”對話框的“ 輸入對象名稱以選擇文本框”中,輸入您的用戶名 (在C:/User/后打開它后顯示在cmd中的用戶名 )。
  8. 單擊“ 檢查名稱”按鈕。
  9. 單擊“ 確定”按鈕。
  10. WindowsApps高級安全設置對話框中,單擊“ 應用” ,然后單擊“確定”
  11. 關閉File Explorer
  12. 重新打開文件資源管理器,然后再次在地址欄中鍵入C:/Program Files/WindowsApps

現在您將看到一個文件夾列表。 每個都對應於您的計算機上安裝的UWP應用程序。 有些應用程序位於多個文件夾中 應用程序的資源位於/Assets子文件夾中。 你也會在那里找到應用程序的圖標。

我想你必須把兩者結合起來,

首先檢查AppxManifest.xml並搜索uap:VisualElements塊,

然后找到Square150x150Logo鍵,

然后獲取相關值並在給定地址中找到該文件並使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM