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

如何用Python获取所有带窗口的运行中GUI应用进程列表?

区分Windows GUI进程与后台进程(基于psutil)

实现思路

Windows任务管理器中的GUI进程指拥有可见顶层窗口的进程,后台进程则无关联可见窗口。要实现该分类,需结合psutil与Windows API(通过pywin32库),检查进程是否绑定了符合条件的窗口。

依赖安装

先安装所需依赖库:

pip install psutil pywin32

完整代码实现

import psutil
import win32gui
import win32process

def is_gui_process(process):
    """判断进程是否为GUI进程(拥有可见顶层窗口)"""
    def callback(hwnd, extra):
        # 仅筛选可见、非最小化的顶层窗口
        if win32gui.IsWindowVisible(hwnd) and not win32gui.IsIconic(hwnd):
            _, pid = win32process.GetWindowThreadProcessId(hwnd)
            if pid == process.pid:
                extra["has_gui"] = True
                return False  # 找到匹配窗口后停止枚举
        return True

    try:
        extra = {"has_gui": False}
        win32gui.EnumWindows(callback, extra)
        return extra["has_gui"]
    except (psutil.AccessDenied, psutil.NoSuchProcess):
        # 无权限访问或进程已结束,默认归为后台进程
        return False

def segregate_processes(processes):
    """将进程区分为GUI应用和后台进程"""
    gui_processes = []
    background_processes = []
    for process in processes:
        if is_gui_process(process):
            gui_processes.append(process)
        else:
            background_processes.append(process)
    return gui_processes, background_processes

# 使用示例
if __name__ == "__main__":
    processes = psutil.process_iter(["pid", "name"])
    gui_procs, bg_procs = segregate_processes(processes)
    
    print("GUI进程:")
    for proc in gui_procs:
        print(f"PID: {proc.pid}, 名称: {proc.name()}")
    
    print("\n后台进程:")
    for proc in bg_procs:
        print(f"PID: {proc.pid}, 名称: {proc.name()}")

关键说明

  • 通过win32gui.EnumWindows枚举系统所有顶层窗口,再用GetWindowThreadProcessId获取窗口所属进程PID,与当前进程PID匹配则判定为GUI进程。
  • 过滤条件IsWindowVisible和not IsIconic确保只统计可见、非最小化的窗口,和Windows任务管理器的分类逻辑对齐。
  • 增加异常处理,避免因进程权限限制或进程已退出导致的运行报错。

内容的提问来源于stack exchange,提问作者Tarun Sinha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:52:34