You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在运行Python的窗口处于焦点时执行代码?

解决方案

要精准判断当前活动窗口是否正在运行Python,仅靠匹配窗口标题的方式局限性极强,需结合进程/子进程检测实现精准判断。以下是具体改进方案:

核心思路

  1. 获取活动窗口句柄,关联到对应进程ID(PID)
  2. 检查该进程或其子进程是否为Python解释器进程
  3. 仅当存在正在运行的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:35:03