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

Python调用win32gui.GetWindowText无法获取窗口标题且报编码错误

问题根因
  • 输出中大量空值窗口标题属于正常现象:很多系统级顶层窗口、悬浮工具控件本身就没有设置标题文本,并非win32gui.GetWindowText调用失败。
  • 抛出UnicodeEncodeError的核心原因:Python默认使用系统cp1252编码向控制台输出内容,当窗口标题包含cp1252字符集不支持的Unicode字符(如报错提到的\u25cf即实心圆点●)时,编码流程直接中断触发异常,程序提前终止。
修复方案

在代码开头配置标准输出流采用UTF-8编码,同时设置编码错误兜底策略,遇到无法识别的字符时自动替换为占位符,不会中断程序运行。

修复后的可运行完整代码:

import sys
import io
import win32gui

# 配置标准输出编码为UTF-8,异常字符自动替换避免崩溃
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')

def main():
    list_window_names()

def list_window_names():
    def winEnumHandler(hwnd, ctx):
        if win32gui.IsWindowVisible(hwnd):
            title = win32gui.GetWindowText(hwnd)
            print(hwnd, f'"{title}"')
    win32gui.EnumWindows(winEnumHandler, None)

main()
可选优化

如果不需要展示无标题的窗口,可以增加标题非空判断,过滤掉空值条目:

def winEnumHandler(hwnd, ctx):
    if win32gui.IsWindowVisible(hwnd):
        title = win32gui.GetWindowText(hwnd)
        if title.strip():
            print(hwnd, f'"{title}"')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:27:48