【发布时间】:2025-12-22 00:40:15
【问题描述】:
我可以使用以下代码从非 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
Documentation 表示下一步应该使用 LoadIcon/LoadImage 将其从可执行文件中提取出来,但我已尽量避免这种情况。
SO post 表示 UWP 应用程序图标路径可以通过 SHLoadIndirectString(来自 Python 的ctypes.windll.shlwapi.SHLoadIndirectString)检索,但该主题涉及在注册表中找到的文件关联 - 打开的窗口不是起点。
如何检索只有窗口句柄的“间接字符串”?或者也许有人知道这个问题的其他解决方案,我对我能得到的任何类型的图标/图像感兴趣。
编辑:接受的答案与this answer 一起揭示了一种使用 Python 和 ctypes 解决此问题的方法。
【问题讨论】:
-
类可能没有图标,试试WM_GETICON。
-
不确定我是否理解你的意思,GetClassLong 会在之后运行 - 如果我使用
win32api.SendMessage(hwnd, WM_GETICON, TYPE, 0)且 TYPE 是 0,1 或 2 中的任何一个,我仍然会收到 0。
标签: c# python winapi uwp pywin32