如何在Windows资源管理器中模拟选中文件的双击或回车操作?
解决方案
方法一:用pyautogui模拟回车操作
这是最简洁的实现方式,通过模拟系统按键触发选中文件的打开动作:
- 先安装依赖包:
pip install pyautogui
- 完整代码:
import subprocess import pyautogui import time import os target_dir = "C:/Users/***/***/DeforumStableDiffusionLocal" os.chdir(target_dir) # 打开资源管理器并定位到目标文件 subprocess.Popen(f'explorer /select, "{target_dir}/run_still.bat"') # 等待窗口加载完成(可根据电脑性能调整等待时长) time.sleep(1) # 模拟按下回车(资源管理器窗口默认会处于激活状态,若未激活可先调用窗口激活) pyautogui.press('enter')
如果资源管理器窗口未自动激活,可补充窗口激活逻辑:
# 获取对应文件夹窗口并激活 window = pyautogui.getWindowsWithTitle("DeforumStableDiffusionLocal")[0] window.activate() time.sleep(0.5) pyautogui.press('enter')
方法二:用win32api精准控制窗口与按键
通过Windows API直接操作窗口句柄,避免其他窗口干扰,稳定性更强:
- 安装依赖包:
pip install pywin32
- 完整代码:
import subprocess import time import os import win32gui import win32api import win32con def get_explorer_window_handle(folder_name): return win32gui.FindWindow(None, folder_name) target_dir = "C:/Users/***/***/DeforumStableDiffusionLocal" folder_name = os.path.basename(target_dir) os.chdir(target_dir) # 启动资源管理器并选中目标文件 subprocess.Popen(f'explorer /select, "{target_dir}/run_still.bat"') time.sleep(1) # 获取窗口句柄并激活 hwnd = get_explorer_window_handle(folder_name) if hwnd: win32gui.SetForegroundWindow(hwnd) time.sleep(0.5) # 模拟按下并释放回车键 win32api.keybd_event(win32con.VK_RETURN, 0, 0, 0) win32api.keybd_event(win32con.VK_RETURN, 0, win32con.KEYEVENTF_KEYUP, 0)
关键说明
直接用subprocess运行脚本出现SSL错误,而资源管理器双击正常,本质是两种运行方式的环境上下文(如环境变量、用户权限、系统关联执行上下文)不同。模拟双击相当于复用了桌面用户的运行环境,从而避开SSL问题。
内容的提问来源于stack exchange,提问作者forbiddenn14
相关产品推荐
相关产品推荐

