如何用Python在Windows 7系统中迭代我连接的iPhone上的照片?

问题描述 投票:2回答:1

当我将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会是一个很好的测试。

python iphone windows winapi
1个回答
5
投票

与其从编辑名翻译成解析名,我认为@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...
© www.soinside.com 2019 - 2024. All rights reserved.