You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python读取Windows任务栏中的打开程序列表?

Python实现读取Windows任务栏打开程序列表

当然有可行的Python方案!针对Windows系统,我们可以借助pywin32库调用原生Windows API来枚举任务栏上的所有打开程序(包括最小化状态的)。任务栏显示的本质是拥有顶层窗口的运行进程,哪怕窗口被最小化,只要它存在就会被识别到。

准备工作

首先需要安装依赖库pywin32,打开命令行执行:

pip install pywin32

完整代码实现

import win32gui
import win32process
import psutil

def get_taskbar_programs():
    # 存储去重后的程序名称
    program_set = set()
    
    def callback(hwnd, extra):
        # 只处理可见窗口且有标题的(排除系统隐藏窗口、桌面等)
        if win32gui.IsWindowVisible(hwnd) and win32gui.GetWindowText(hwnd):
            # 获取窗口对应的进程ID
            _, pid = win32process.GetWindowThreadProcessId(hwnd)
            try:
                # 通过进程ID获取进程信息
                process = psutil.Process(pid)
                process_name = process.name()
                # 排除一些系统进程(比如桌面进程、任务栏自身等)
                exclude_list = ["explorer.exe", "svchost.exe", "dllhost.exe"]
                if process_name not in exclude_list:
                    program_set.add(process_name.replace(".exe", ""))
            except (psutil.NoSuchProcess, psutil.AccessDenied):
                # 忽略无法访问的进程
                pass
    
    # 枚举所有顶层窗口
    win32gui.EnumWindows(callback, None)
    
    # 转换为列表返回
    return list(program_set)

# 测试调用
if __name__ == "__main__":
    taskbar_programs = get_taskbar_programs()
    print("任务栏中的打开程序:")
    for program in taskbar_programs:
        print(f"- {program}")

代码说明

  1. 窗口枚举:通过win32gui.EnumWindows遍历所有顶层窗口,回调函数处理每个窗口句柄
  2. 过滤条件:只保留可见且有窗口标题的窗口,排除系统级的隐藏窗口
  3. 进程关联:通过窗口句柄获取进程ID,再用psutil获取进程名称,确保我们拿到的是程序的真实名称
  4. 去重与排除:用集合去重同一程序的多个窗口,同时排除explorer.exe(桌面进程)这类不需要显示的系统进程

效果示例

当你打开Outlook、Slack、Chrome、Skype和Notepad时,运行代码会返回类似如下的列表:

任务栏中的打开程序:
- Outlook
- Slack
- Chrome
- Skype
- Notepad

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

火山引擎 最新活动