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

如何使用Python同时捕获指定的多个Windows窗口截图?

Python捕获多个指定窗口的截图方案

完全可以实现同时捕获多个指定窗口的截图,下面是针对Windows平台的实用方案(主流PC场景):

核心依赖库

使用pywin32获取窗口句柄与信息,结合Pillow处理图像,安装命令:

pip install pywin32 pillow

实现步骤与代码

1. 根据窗口标题获取句柄

通过窗口标题精准或模糊匹配目标窗口,拿到窗口的句柄(HWND)。

2. 获取窗口的位置与尺寸

通过句柄获取窗口客户区的左上角坐标、宽度和高度,确定截图区域。

3. 捕获窗口截图

调用Windows API的PrintWindow方法,即使窗口被遮挡也能捕获其内容(这是比pyscreenshot更灵活的核心优势)。

完整代码示例:

import win32gui
import win32ui
import win32con
from PIL import Image

def capture_window_by_title(window_title):
    # 模糊匹配窗口,需精准匹配可改用win32gui.FindWindow(类名, 标题)
    hwnd = win32gui.FindWindow(None, window_title)
    if not hwnd:
        print(f"未找到标题为{window_title}的窗口")
        return None
    
    # 获取窗口客户区的位置和大小
    left, top, right, bottom = win32gui.GetClientRect(hwnd)
    width = right - left
    height = bottom - top
    
    # 初始化设备上下文与位图对象
    hwnd_dc = win32gui.GetWindowDC(hwnd)
    mfc_dc = win32ui.CreateDCFromHandle(hwnd_dc)
    save_dc = mfc_dc.CreateCompatibleDC()
    save_bitmap = win32ui.CreateBitmap()
    save_bitmap.CreateCompatibleBitmap(mfc_dc, width, height)
    save_dc.SelectObject(save_bitmap)
    
    # 执行窗口捕获
    capture_result = win32gui.PrintWindow(hwnd, save_dc.GetSafeHdc(), 0)
    
    # 将位图转换为PIL图像
    bmp_info = save_bitmap.GetInfo()
    bmp_data = save_bitmap.GetBitmapBits(True)
    img = Image.frombuffer(
        'RGB',
        (bmp_info['bmWidth'], bmp_info['bmHeight']),
        bmp_data, 'raw', 'BGRX', 0, 1
    )
    
    # 释放资源
    win32gui.DeleteObject(save_bitmap.GetHandle())
    save_dc.DeleteDC()
    mfc_dc.DeleteDC()
    win32gui.ReleaseDC(hwnd, hwnd_dc)
    
    return img if capture_result == 0 else None

# 示例:批量捕获指定窗口
target_titles = ["记事本", "Google Chrome"]
for title in target_titles:
    screenshot = capture_window_by_title(title)
    if screenshot:
        screenshot.save(f"{title}_screenshot.png")
        print(f"{title}截图已保存")

补充说明

  • 若存在同标题窗口,FindWindow会返回第一个匹配项,可改用win32gui.EnumWindows遍历所有窗口,结合进程ID、窗口类名等信息精准筛选目标。
  • 针对DirectX渲染的游戏、视频窗口,PrintWindow可能失效,这类场景可改用mss库直接截取屏幕对应区域,但需确保窗口未被遮挡。
  • 运行代码时需保证有足够系统权限,避免因权限限制无法访问窗口内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:40:37