如何使用Python读取其他窗口中的文本内容
Python 读取其他窗口文本实现方案
首先安装所需依赖库pywin32,安装命令如下:
pip install pywin32
实现原理
Windows平台下可通过调用User32.dll的系统API遍历窗口、获取窗口文本,和你参考的Java实现逻辑完全一致,Python可通过pywin32库直接调用这些系统API完成需求。
完整可运行代码示例
import win32gui import win32con import win32api def get_window_text(hwnd): # 获取窗口文本长度 text_length = win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH) + 1 # 分配存储文本的缓冲区 buffer = win32gui.PyMakeBuffer(text_length) # 发送获取文本的系统消息 win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, text_length, buffer) # 解码返回结果并去除空字符 return buffer.tobytes().decode('utf-16', errors='ignore').strip('\x00') def enum_child_windows(hwnd, result_list): # 遍历当前窗口的所有子窗口 child_windows = [] win32gui.EnumChildWindows(hwnd, lambda child, param: param.append(child), child_windows) for child in child_windows: window_text = get_window_text(child) if window_text: result_list.append({ '窗口句柄': child, '窗口类名': win32gui.GetClassName(child), '窗口文本': window_text }) # 递归遍历子窗口的下级窗口 enum_child_windows(child, result_list) if __name__ == '__main__': # 替换为你要读取的目标窗口的标题关键词,也可直接指定窗口句柄 target_window_title = '你要读取的窗口标题' # 查找目标窗口句柄 hwnd = win32gui.FindWindow(None, target_window_title) if not hwnd: print('未找到目标窗口') else: all_text_info = [] # 先获取主窗口文本 main_window_text = get_window_text(hwnd) if main_window_text: all_text_info.append({ '窗口句柄': hwnd, '窗口类名': win32gui.GetClassName(hwnd), '窗口文本': main_window_text }) # 遍历所有子窗口获取文本 enum_child_windows(hwnd, all_text_info) # 打印最终获取的所有文本信息 for info in all_text_info: print(f"句柄:{info['窗口句柄']},类名:{info['窗口类名']},文本:{info['窗口文本']}")
注意事项
- 该方案仅适用于Windows平台,常规Win32标准控件窗口可直接读取,非标准渲染窗口(如Qt自绘窗口、游戏窗口、浏览器页面内容)需额外适配
- 若目标窗口权限高于当前Python进程,需以管理员身份运行Python脚本才可正常获取文本
- 若不清楚目标窗口的完整标题,可先运行下方代码遍历所有顶层窗口,找到对应的窗口标题后替换到示例代码中
import win32gui def print_all_top_windows(hwnd, param): print(f"句柄:{hwnd},标题:{win32gui.GetWindowText(hwnd)}") win32gui.EnumWindows(print_all_top_windows, None)
内容的提问来源于stack exchange,提问作者Nowis F. R
相关产品推荐
相关产品推荐

