如何获取Windows系统中已打开文件资源管理器的路径
获取Windows已打开文件资源管理器的路径
解决方案依赖
使用pywin32库调用Windows API实现,先执行安装命令:
pip install pywin32
实现代码
import win32gui import win32com.client import urllib.parse def get_open_explorer_paths(): explorer_paths = [] shell = win32com.client.Dispatch("Shell.Application") # 遍历所有资源管理器窗口 for window in shell.Windows(): # 过滤出文件资源管理器窗口(排除IE等其他窗口) if window.Name == "文件资源管理器": # 获取LocationURL并转换为本地路径 url = window.LocationURL if url.startswith("file:///"): # 解码URL编码的路径,处理特殊字符 path = urllib.parse.unquote(url[8:]).replace('/', '\\') explorer_paths.append(path) return explorer_paths # 示例调用 if __name__ == "__main__": paths = get_open_explorer_paths() if paths: print("已打开的文件资源管理器路径:") for idx, path in enumerate(paths, 1): print(f"{idx}. {path}") else: print("未找到打开的文件资源管理器窗口")
代码说明
- Shell.Application对象:通过Windows Shell COM接口获取所有打开的资源管理器实例。
- 窗口过滤:通过窗口名称"文件资源管理器"筛选目标窗口,避免误识别IE等使用相同Shell接口的程序。
- 路径转换:将
LocationURL返回的file:///格式URL解码为本地Windows路径,处理URL编码的特殊字符(如空格、中文)。
关于文件对话框的补充说明
文件对话框(如打开/保存对话框)的获取难度更高,因为这类窗口属于父程序的子窗口,没有统一的Shell接口可直接获取路径。可以尝试以下思路:
- 枚举所有窗口,找到类名为
#32770的对话框窗口。 - 通过Windows API向对话框发送消息,获取编辑框中的路径内容。
- 该方法需要处理不同程序对话框的控件结构差异,实现复杂度较高,若仅针对系统默认对话框,可进一步研究
GetDlgItemText等API的使用。
内容的提问来源于stack exchange,提问作者Shrirang Mahajan
相关产品推荐
相关产品推荐

