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
实现的。它可以工作!我不知道这个函数。非常感谢。