【问题标题】:python open windows explorerpython打开windows资源管理器
【发布时间】:2016-08-08 17:37:39
【问题描述】:

请想象这样一种情况:本地文件的图标显示在 GUI 中,右键单击该图标,弹出上下文菜单,选项:在资源管理器中显示文件。单击该选项,然后打开一个资源管理器窗口,并选择特定文件。很多编辑器都有这样的功能:在文件夹中显示或在资源管理器中显示

其实GUI是用PyQt搭建的,我第一个想法很简单,打开一个子进程,通过命令行:

explorer /select, a_full_path_name

这种行为确实是我所需要的,但是当再次单击“在文件夹中显示”时,将打开一个新的资源管理器窗口,甚至旧的也存在!一个顽皮的男孩一口气点击了几十次“在文件夹中显示”怎么样?所以我只需要一扇窗户,如果有旧窗户,就将它举到前面。

命令start /D a_path . 可能会让顽皮男孩失望(运行几次,只有一个窗口。)但是,没有选项突出显示选定的文件,因此也让我失望......

如前所述,很多编辑器都有这样的“在文件夹中显示”功能, 但令我惊讶的是,PyCharm“在资源管理器中显示”将打开多个窗口,多次单击同一文件,以及 CodeBlocks“打开包含文件夹”,但是 程序员的记事本“打开包含文件夹”将始终只打开同一个文件上的一个文件夹。(老实说,我的电脑中只有 3 个编辑器,除了 windows 记事本 :)


我的问题:
上面说的功能可以通过windows cmd来实现吗?
如果不能,有没有python方法可以实现?

其实我在stackoverflow里找到了几个相关的问题,for example, 但是我的问题没有解决,有人可以搭我一程吗?

【问题讨论】:

    标签: python windows explorer


    【解决方案1】:

    最后,某个好人引导我找到了答案。
    来自https://github.com/exaile/exaile/blob/master/xl/common.py#L350

    在py3+中

    import ctypes
    
    ctypes.windll.ole32.CoInitialize(None)
    upath = r"C:\Windows"
    pidl = ctypes.windll.shell32.ILCreateFromPathW(upath)
    ctypes.windll.shell32.SHOpenFolderAndSelectItems(pidl, 0, None, 0)
    ctypes.windll.shell32.ILFree(pidl)
    ctypes.windll.ole32.CoUninitialize()
    

    在py2+中

    只需提供一个 unicode 路径即可。
    注意:ILCreateFromPathW (Unicode) 和 ILCreateFromPathA (ANSI)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多