python打开Windows资源管理器

时间:2016-08-08 17:37:39

标签: python windows explorer

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

实际上,GUI是由PyQt构建的,我的第一个想法很简单,只需打开一个子进程并传递命令行:

Like.group(:news_id).select("news_id, SUM(case when likes.like then 1 else -1 end) as max_positive").order("max_positive desc")

这种行为确实是我所需要的,但是当再次单击“在文件夹中显示”时,将会打开一个新的资源管理器窗口,即使旧版本也存在!一个顽皮的男孩在呼吸中点击“在文件夹中显示”几十次怎么样?所以我只需要一个窗口,如果存在一个旧窗口,只需将它提升到前面。

命令explorer /select, a_full_path_name可能让顽皮的男孩失望(多次运行,只有一个窗口。)但是,没有选项可以突出显示所选文件,因此也让我失望......

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

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

事实上,我在stackoverflow for example中找到了几个相关的问题, 但是我的问题没有解决,有人会帮我一把吗?

1 个答案:

答案 0 :(得分: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)