Python Pywin32替代方案或将PyIDL转换为PIDL的方法
显然我已经发现了。现在我无法将Python Pywin32替代方案或将PyIDL转换为PIDL的方法,python,windows,ctypes,pywin32,activepython,Python,Windows,Ctypes,Pywin32,Activepython,显然我已经发现了。现在我无法将win32com.shell.shell.SHGetFileInfo函数与win32com.shell.shellcon.SHGFI_-PIDL标志一起使用 我想做的是枚举桌面图标(所有图标,包括虚拟图标)并获取图标本身(图像)。我尝试使用以下方法(在我知道错误之前)实现此目的: from win32com.shell import shell, shellcon desktop = shell.SHGetDesktopFolder() enum = desktop
win32com.shell.shell.SHGetFileInfo
函数与win32com.shell.shellcon.SHGFI_-PIDL
标志一起使用
我想做的是枚举桌面图标(所有图标,包括虚拟图标)并获取图标本身(图像)。我尝试使用以下方法(在我知道错误之前)实现此目的:
from win32com.shell import shell, shellcon
desktop = shell.SHGetDesktopFolder()
enum = desktop.EnumObjects(None, shellcon.SHCONTF_FOLDERS | shellcon.SHCONTF_NONFOLDERS)
for pidl in enum:
shell_info = shell.SHGetFileInfo(desktop_pidl, 0, shellcon.SHGFI_PIDL | shellcon.SHGFI_SYSICONINDEX | shellcon.SHGFI_ICON | shellcon.SHGFI_DISPLAYNAME)
那么,如果没有带PIDL的shell.SHGetFileInfo
,我怎么做呢?仅使用ctypes进行此操作的问题在于enum
包含特定于pywin32的pyidl。有没有一种方法可以将PyIDL转换为常规的PIDL,我可以将其与ctypes一起使用?或者有没有一种方法可以完全不用PyIDL来实现这一点
在最坏的情况下,我可以使用ctypes来完成所有这些(包括SHGetDesktopFolder
和EnumObjects
),但这太长了,感觉就像是重新发明轮子
谢谢大家! 我将修改对你原来问题的回答。这是直接使用
shell.pidlastring
实现的。它可以工作!我不知道这个函数。非常感谢。