簡體   English   中英

如何從正在運行的UWP應用程序的窗口中檢索圖標/圖像?

[英]How to retrieve an icon/image from the window of a running UWP application?

我可以使用以下代碼從非UWP應用獲取圖標:

from win32con GCL_HICON, WM_GETICON,
from win32gui import GetClassLong, SendMessageTimeout

_, icon_handle = SendMessageTimeout(hwnd, WM_GETICON, 1, 0, 0, 50)
if icon_handle == 0:
    icon_handle = GetClassLong(hwnd, GCL_HICON)
    if icon_handle == 0:
        return Settings.BLANK_ICON

文檔說下一步應該使用LoadIcon / LoadImage從可執行文件中提取它,但是我嘗試避免這種情況。

因此,帖子說可以通過SHLoadIndirectString (來自Python的ctypes.windll.shlwapi.SHLoadIndirectString )檢索UWP應用程序圖標路徑,但是該主題涉及在注冊表中找到的文件關聯-打開的窗口不是起點。

如何檢索僅具有窗口句柄的“間接字符串”? 也許有人知道解決此問題的其他方法,我對我能得到的任何類型的圖標/圖像都感興趣。

編輯:接受的答案以及此答案揭示了一種使用Python和ctypes解決此問題的方法。

UWP應用程序不僅有一個圖標,而且可能有許多圖標可以適應特定的設備,外形等。

正如@Simon Mourier所說,大多數“現代應用程序”(或Windows Store應用程序,或AppX應用程序模型中的應用程序)信息都可以從官方API中查詢。(我只是一個搬運工)

您可以從GetPackageFullName函數開始(它獲取指定進程的程序包全名)。 獲得包全名后,您可以使用包查詢API來獲取更多信息。

這些API是本機API,所以據我所知,它們在.NET Framework中沒有等效的API。 但是,可以通過WinRT應用程序以某種方式訪問​​它們(您確實可以從標准.NET Framework應用程序訪問某些WinRT API,但這有點hacker)。

這些應用程序中包含的圖像是特殊的,因為它們被定義為資源(​​資產)鍵,可以使用限定符對其進行調整以形成最終路徑。 例如,在此處進行記錄: 如何使用限定符(HTML)命名資源 ;在這里:快速入門: 使用文件或圖像資源(HTML)

問題是您可以找到的內容在很大程度上取決於應用程序本身,因此確定要使用的圖像不是一件容易的事,而且我沒有為此找到任何API,因此我編寫了一個示例,以獲取最大比例的圖像。給定資源名稱作為FindHighestScaleQualifiedImagePathFindHighestScaleQualifiedImagePath )。 您可以從此路徑加載WPF BitmapSource(或任何其他映像平台資源)。

提供的鏈接中包含樣本。 有關詳細信息,請參閱:

從UWP App獲取圖標

暫無
暫無

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

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