Python根据Windows窗口截图的几种实现方法

作者:

文章目录
  • from PIL import ImageGrab # 截取整个屏幕 screenshot = ImageGrab.grab() screenshot.save(“full_screen.png”) # 截取指定区域(左上角坐标+宽高) crop_area = (100, 100, 500, 400) # left, top, right, bottom cropped = ImageGrab.grab(bbox=crop_area) cropped.save(“partial_screen.png”)
  • 需先安装pywin32库: pip install pywin32 代码示例: import win32gui from PIL import ImageGrab # 获取窗口句柄 hwnd = win32gui.FindWindow(None, “记事本”) # 窗口标题 # 获取窗口位置和尺寸 left, top, right, bot = win32gui.GetWindowRect(hwnd) width = right – left height = bot – top # 截取窗口区域 img = ImageGrab.grab(bbox=(left, top, right, bot)) img.save(“window_screenshot.png”)
  • 安装: pip install mss 代码示例: import mss with mss.mss() as sct: # 截取指定显示器编号的屏幕 monitor = sct.monitors[1] sct_img = sct.grab(monitor) mss.tools.to_png(sct_img.rgb, sct_img.size, output=”mss_screenshot.png”)
  • 对于非最小化窗口,可通过win32gui获取窗口DC后截图: import win32gui import win32ui import win32con from PIL import Image hwnd = win32gui.FindWindow(None, “计算器”) # 创建设备上下文 hdc = win32gui.GetDC(hwnd) mdc = win32gui.CreateCompatibleDC(hdc) # 获取窗口尺寸 left, top, right, bot = win32gui.GetWindowRect(hwnd) w, h = right – left, bot – top # 创建位图 bitmap = win32ui.CreateBitmap() bitmap.CreateCompatibleBitmap(hdc, w, h) win32gui.SelectObject(mdc, bitmap.GetHandle()) # 复制屏幕区域 win32gui.BitBlt(mdc, 0, 0, w, h, hdc, 0, 0, win32con.SRCCOPY) # 保存为图片 bmp_info = bitmap.GetInfo() bmp_str = bitmap.GetBitmapBits(True) pil_img = Image.frombuffer( ‘RGB’, (bmp_info[‘bmWidth’], bmp_info[‘bmHeight’]), bmp_str, ‘raw’, ‘BGRX’, 0, 1 ) pil_img.save(“hidden_window.png”) # 释放资源 win32gui.DeleteObject(bitmap.GetHandle()) win32gui.DeleteDC(mdc) win32gui.ReleaseDC(hwnd, hdc)
  • 窗口标题匹配:FindWindow需精确匹配窗口标题,可通过Spy++工具获取实际标题 权限问题:部分窗口截图需要管理员权限 性能对比: PIL:简单快速,适合简单场景 mss:跨平台,支持多显示器,性能优异 win32API:精准控制,可处理隐藏窗口 DPI缩放:高DPI屏幕需额外处理缩放比例,可通过ctypes获取系统缩放系数调整坐标 根据具体需求选择方案,常规截图推荐使用PIL或mss,精准控制推荐win32API方案。 到此这篇关于Python根据Windows窗口截图的几种实现方法的文章就介绍到这了,更多相关Python根据Windows窗口截图内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python3应用windows api对后台程序窗口及桌面截图并保存的方法 通过python实现windows桌面截图代码实例 Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
  • 目录
    • 1. 使用PIL库截取全屏或指定区域
    • 2. 结合win32gui精准截取指定窗口
    • 3. 使用mss库(跨平台高性能)
    • 4. 截取隐藏窗口(需配合win32API)
    • 关键注意事项:

    在Windows系统下,Python可通过以下方法实现窗口截图,具体方案取决于需求精度和场景:

    from PIL import ImageGrab
    
    # 截取整个屏幕
    screenshot = ImageGrab.grab()
    screenshot.save("full_screen.png")
    
    # 截取指定区域(左上角坐标+宽高)
    crop_area = (100, 100, 500, 400)  # left, top, right, bottom
    cropped = ImageGrab.grab(bbox=crop_area)
    cropped.save("partial_screen.png")
    

    需先安装pywin32库:

    pip install pywin32
    

    代码示例:

    import win32gui
    from PIL import ImageGrab
    
    # 获取窗口句柄
    hwnd = win32gui.FindWindow(None, "记事本")  # 窗口标题
    
    # 获取窗口位置和尺寸
    left, top, right, bot = win32gui.GetWindowRect(hwnd)
    width = right - left
    height = bot - top
    
    # 截取窗口区域
    img = ImageGrab.grab(bbox=(left, top, right, bot))
    img.save("window_screenshot.png")
    

    安装:

    pip install mss
    

    代码示例:

    import mss
    
    with mss.mss() as sct:
        # 截取指定显示器编号的屏幕
        monitor = sct.monitors[1]
        sct_img = sct.grab(monitor)
        mss.tools.to_png(sct_img.rgb, sct_img.size, output="mss_screenshot.png")
    

    对于非最小化窗口,可通过win32gui获取窗口DC后截图:

    import win32gui
    import win32ui
    import win32con
    from PIL import Image
    
    hwnd = win32gui.FindWindow(None, "计算器")
    
    # 创建设备上下文
    hdc = win32gui.GetDC(hwnd)
    mdc = win32gui.CreateCompatibleDC(hdc)
    
    # 获取窗口尺寸
    left, top, right, bot = win32gui.GetWindowRect(hwnd)
    w, h = right - left, bot - top
    
    # 创建位图
    bitmap = win32ui.CreateBitmap()
    bitmap.CreateCompatibleBitmap(hdc, w, h)
    win32gui.SelectObject(mdc, bitmap.GetHandle())
    
    # 复制屏幕区域
    win32gui.BitBlt(mdc, 0, 0, w, h, hdc, 0, 0, win32con.SRCCOPY)
    
    # 保存为图片
    bmp_info = bitmap.GetInfo()
    bmp_str = bitmap.GetBitmapBits(True)
    pil_img = Image.frombuffer(
        'RGB',
        (bmp_info['bmWidth'], bmp_info['bmHeight']),
        bmp_str,
        'raw',
        'BGRX',
        0,
        1
    )
    pil_img.save("hidden_window.png")
    
    # 释放资源
    win32gui.DeleteObject(bitmap.GetHandle())
    win32gui.DeleteDC(mdc)
    win32gui.ReleaseDC(hwnd, hdc)
    

    1. 窗口标题匹配FindWindow需精确匹配窗口标题,可通过Spy++工具获取实际标题
    2. 权限问题:部分窗口截图需要管理员权限
    3. 性能对比
      • PIL:简单快速,适合简单场景
      • mss:跨平台,支持多显示器,性能优异
      • win32API:精准控制,可处理隐藏窗口
    4. DPI缩放:高DPI屏幕需额外处理缩放比例,可通过ctypes获取系统缩放系数调整坐标

    根据具体需求选择方案,常规截图推荐使用PIL或mss,精准控制推荐win32API方案。

    到此这篇关于Python根据Windows窗口截图的几种实现方法的文章就介绍到这了,更多相关Python根据Windows窗口截图内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • python3应用windows api对后台程序窗口及桌面截图并保存的方法
    • 通过python实现windows桌面截图代码实例
    • Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)

    站内搜索