当我将iPhone连接到Windows 7系统时,Windows资源管理器会打开一个虚拟文件夹,打开DCIM内容。我可以通过这里提到的Pywin32 (218)访问shell库接口。我可以在python中使用库抽象吗?
给定一个面向用户的编辑路径(SIGDN_DESKTOPABSOLUTEEDITING),在Windows资源管理器中工作,并启动Windows照片查看器。
ComputerMy iPhone\Internal Storage\DCIM\828RTETC\IMG_2343.JPG
我如何获得一个解析路径(SIGDN_DESKTOPABSOLUTEPARSING),用于SHCreateItemFromParsingName()来创建ShellItem?(我会从其中绑定一个流,然后像这样复制到本地磁盘上)。在Windows中使用CreateFile可以从iPhone中读取图像吗? )
from win32com.shell import shell
edit_path = r'Computer\My iPhone\Internal Storage\DCIM\828RTETC\IMG_2343.JPG'
parse_path = # How to convert edit_path to a SIGDN_DESKTOPABSOLUTEPARSING path?
i = shell.SHCreateItemFromParsingName(parse_path, None, shell.IID_IShellItem)
最终的目标将是通过类似IShellFolder接口的东西来迭代DCIM "文件夹",并将最近的照片复制到本地磁盘。我不想为了解析名字而打开一个FileOpenDialog。但在进入这一点之前,我想为其中一个文件创建一个ShellItem会是一个很好的测试。
与其从编辑名翻译成解析名,我认为@jonathan-potter的建议是一个更好的方法。这里有一个硬编码的片段,显示了如何从Desktop文件夹开始,并排除了错误处理。
from win32com.shell import shell, shellcon
desktop = shell.SHGetDesktopFolder()
for pidl in desktop:
if desktop.GetDisplayNameOf(pidl, shellcon.SHGDN_NORMAL) == "Computer":
break
folder = desktop.BindToObject(pidl, None, shell.IID_IShellFolder)
for pidl in folder:
if folder.GetDisplayNameOf(pidl, shellcon.SHGDN_NORMAL) == "My iPhone":
break
folder = folder.BindToObject(pidl, None, shell.IID_IShellFolder)
for pidl in folder:
if folder.GetDisplayNameOf(pidl, shellcon.SHGDN_NORMAL) == "Internal Storage":
break
# And so on...