如何实现仅当指定程序激活时通过快捷键运行Python脚本
实现Windows程序关联快捷键触发Python脚本的通用方法
方案一:使用AutoHotkey(AHK)
AHK是Windows平台专门用于自动化操作和快捷键定制的工具,能轻松实现窗口检测、快捷键绑定逻辑。
- 安装AutoHotkey(官网下载安装即可)
- 编写AHK脚本,示例如下:
; 替换为目标程序的窗口标题(可通过AHK自带的Window Spy工具获取) TargetWindowTitle := "目标程序窗口标题" ; 绑定快捷键示例:Ctrl+Shift+F10,可自行修改 ^+F10:: ; 检测目标程序窗口是否存在 IfWinExist, %TargetWindowTitle% { ; 运行Python脚本,替换为你的脚本实际路径 Run, python "C:\your\script\path\script.py" ; 等待脚本执行完成(根据脚本耗时调整Sleep时长,或用ProcessWait等待进程结束) Sleep, 3000 ; 关闭目标程序窗口 WinClose, %TargetWindowTitle% } Return
- 保存脚本为
.ahk后缀,双击运行后,只有目标程序打开时,按下绑定的快捷键才会触发脚本运行,完成后自动关闭程序。
方案二:纯Python实现(依赖pywin32库)
如果不想额外安装工具,可以用Python结合pywin32实现全局快捷键注册和窗口检测:
- 安装pywin32:
pip install pywin32 - 编写Python脚本,示例逻辑:
import win32api import win32con import win32gui import subprocess import time # 目标程序的窗口标题 TARGET_WINDOW_TITLE = "目标程序窗口标题" # 业务脚本路径 PY_SCRIPT_PATH = r"C:\your\script\path\script.py" # 全局快捷键:Ctrl+Shift+F10(可自行修改键码) HOTKEY_ID = 1 MODIFIERS = win32con.MOD_CONTROL | win32con.MOD_SHIFT KEY = win32con.VK_F10 def get_target_window_handle(): return win32gui.FindWindow(None, TARGET_WINDOW_TITLE) def hotkey_callback(hwnd, msg, wparam, lparam): if wparam == HOTKEY_ID: target_hwnd = get_target_window_handle() if target_hwnd: # 运行业务Python脚本 subprocess.run(["python", PY_SCRIPT_PATH], check=True) # 等待脚本执行完成(或改用subprocess.wait()等待进程结束) time.sleep(3) # 发送关闭信号给目标程序 win32gui.PostMessage(target_hwnd, win32con.WM_CLOSE, 0, 0) return True # 注册全局快捷键 win32api.RegisterHotKey(None, HOTKEY_ID, MODIFIERS, KEY) # 消息循环监听快捷键 try: msg = win32gui.GetMessage(None, 0, 0) while msg: if msg.message == win32con.WM_HOTKEY: hotkey_callback(None, msg.message, msg.wParam, msg.lParam) win32gui.TranslateMessage(msg) win32gui.DispatchMessage(msg) msg = win32gui.GetMessage(None, 0, 0) finally: win32api.UnregisterHotKey(None, HOTKEY_ID)
- 运行这个Python脚本,它会在后台监听快捷键,只有目标程序窗口存在时,按下快捷键才会触发你的业务脚本,执行完成后关闭目标程序。
注意事项
- 窗口标题要准确,如果目标程序窗口标题有动态变化部分,AHK中可以用
IfWinExist, ahk_exe 程序.exe匹配进程,Python中可通过win32process枚举进程来查找对应窗口。 - 脚本执行等待时间可根据实际情况调整,或改为等待脚本进程结束(比如subprocess的
wait()方法、AHK的ProcessWait命令)。 - 全局快捷键尽量选择不与系统或目标程序冲突的组合。
内容的提问来源于stack exchange,提问作者SpectraXCD
相关产品推荐
相关产品推荐

