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

如何在Python中使用pywinauto库编写代码实现截图功能

pywinauto实现窗口截图的实现方案

你需要先安装对应的依赖库:
pip install pywinauto pillow


完整实现代码

下面的代码覆盖两种常用截图场景:捕获整个目标窗口、捕获窗口内指定控件,可根据实际需求选用:

from pywinauto import Application
import time

def capture_target_window(window_title: str, save_path: str = "window_capture.png", bring_front: bool = False):
    """
    捕获指定标题的整个窗口
    :param window_title: 目标窗口的标题文本,支持模糊匹配
    :param save_path: 截图保存路径
    :param bring_front: 是否先把窗口提到前台再截图(硬渲染类窗口需要前台才能正常截取)
    """
    # 连接已打开的目标窗口,如果需要启动新程序可替换为Application().start()方法
    app = Application(backend="uia").connect(title_re=rf".*{window_title}.*", timeout=10)
    win = app.top_window()
    
    if bring_front:
        win.set_focus()
        time.sleep(0.3) # 等待窗口激活完成
    
    # 执行截图操作
    img = win.capture_as_image()
    img.save(save_path)
    print(f"窗口截图已保存到: {save_path}")
    return img

def capture_specific_control(window_title: str, control_type: str, control_name: str, save_path: str = "control_capture.png"):
    """
    捕获窗口内指定控件的内容,比如弹窗里的按钮、文本区域都可单独截取
    :param window_title: 目标窗口标题
    :param control_type: 控件类型,可选值为Button、Edit、Text、Pane等
    :param control_name: 控件上显示的文本内容
    :param save_path: 截图保存路径
    """
    app = Application(backend="uia").connect(title_re=rf".*{window_title}.*", timeout=10)
    win = app.top_window()
    # 定位目标控件
    target_ctrl = win.child_window(title=control_name, control_type=control_type)
    # 执行控件截图
    img = target_ctrl.capture_as_image()
    img.save(save_path)
    print(f"控件截图已保存到: {save_path}")
    return img

if __name__ == "__main__":
    # 替换为你要截图的窗口标题即可,比如附图的系统错误弹窗标题一般为"错误"
    TARGET_WINDOW_TITLE = "错误"
    # 截取整个窗口
    capture_target_window(TARGET_WINDOW_TITLE, save_path="full_window.png")
    # 示例:单独截取窗口里的"确定"按钮
    # capture_specific_control(TARGET_WINDOW_TITLE, control_type="Button", control_name="确定", save_path="confirm_btn.png")

使用注意事项

  • 后端选择:传统Win32程序可将代码里的backend="uia"替换为backend="win32",WPF、UWP、系统弹窗类界面用uia后端兼容性更好
  • 权限要求:如果要截取系统级弹窗(比如UAC提示、系统错误框),需要用管理员权限运行Python脚本,否则会因权限不足无法连接目标窗口
  • 匹配问题:如果窗口标题匹配不准,可以用pywinauto自带的Inspect工具查看窗口的真实类名、标题,调整connect方法的匹配参数即可
  • 特殊窗口:部分用OpenGL、DirectX硬渲染的窗口,必须将窗口切到前台无遮挡才能截到正常内容,把bring_front参数设为True即可

待捕获的目标界面参考:
待捕获的目标窗口示例


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:55:18