如何将Windows系统运行的应用列表完整保存为JSON文件?
问题原因
你每次枚举到可见窗口时,都会新建一个仅包含当前窗口标题的app_list,并且用'w'模式打开文件——这个模式会直接覆盖之前写入的内容,最终文件里只会保留最后一个被枚举到的窗口标题。
修正后的代码
import json import win32gui def list_window_names(): app_list = [] # 初始化空列表存储所有窗口标题 def winEnumHandler(hwnd, ctx): if win32gui.IsWindowVisible(hwnd): window_title = win32gui.GetWindowText(hwnd) # 过滤空标题窗口(部分可见窗口标题为空) if window_title: ctx.append(window_title) # 将app_list作为上下文传递给枚举回调函数,统一收集所有窗口标题 win32gui.EnumWindows(winEnumHandler, app_list) # 所有窗口枚举完成后,一次性写入文件 with open('application_running.json', 'w', encoding='utf-8') as f: json.dump(app_list, f, ensure_ascii=False, indent=4) print('所有运行的应用已保存到application_running.json') list_window_names()
关键修正点
- 把列表初始化放在枚举回调函数外部,通过
EnumWindows的上下文参数传递,确保所有窗口标题都添加到同一个列表中。 - 仅在枚举完成后执行一次文件写入操作,避免多次覆盖内容。
- 增加空标题过滤,避免列表中出现无效的空字符串条目。
- 指定
utf-8编码和ensure_ascii=False,保证中文窗口标题能正确保存。
内容的提问来源于stack exchange,提问作者so-me
相关产品推荐
相关产品推荐

