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
相关产品推荐
相关产品推荐

