如何仅在运行Python的窗口处于焦点时执行代码?
解决方案
要精准判断当前活动窗口是否正在运行Python,仅靠匹配窗口标题的方式局限性极强,需结合进程/子进程检测实现精准判断。以下是具体改进方案:
核心思路
- 获取活动窗口句柄,关联到对应进程ID(PID)
- 检查该进程或其子进程是否为Python解释器进程
- 仅当存在正在运行的Python进程时,执行目标代码
依赖安装
先安装所需工具库:
pip install psutil pywin32 pygetwindow
完整代码实现
import pygetwindow as gw import win32api import win32process import psutil def is_python_running_window(): try: # 获取当前活动窗口 active_window = gw.getActiveWindow() if not active_window: return False # 通过窗口句柄获取进程ID(PID) hwnd = active_window._hWnd _, pid = win32process.GetWindowThreadProcessId(hwnd) # 获取进程对象 process = psutil.Process(pid) # 定义常见的Python解释器可执行文件名 python_executables = {"python", "python3", "py", "python.exe", "python3.exe", "py.exe"} # 检查主进程是否为Python解释器 if process.cmdline(): exec_name = psutil._common.concrete_path(process.cmdline()[0]).split("\\")[-1].lower() if exec_name in python_executables: return True # 检查子进程(适配终端窗口中运行Python的场景:主进程是终端,子进程是Python) for child in process.children(recursive=True): if child.cmdline(): child_exec = psutil._common.concrete_path(child.cmdline()[0]).split("\\")[-1].lower() if child_exec in python_executables: return True return False except Exception: return False def do(key): if is_python_running_window(): # 写入你需要执行的代码 print("执行目标操作")
方案优势
- 全终端适配:无论使用PowerShell、CMD、Windows Terminal还是第三方终端,只要窗口内正在运行Python进程,就能被精准检测
- 避免误触发:仅当VSCode处于运行/调试Python程序状态时(此时VSCode进程会启动Python子进程)才会触发,普通代码编辑场景不会误判
- 判断精准:通过进程而非窗口标题识别,彻底解决标题匹配的局限性
内容的提问来源于stack exchange,提问作者GhostShadow
相关产品推荐
相关产品推荐

