窗口截图
静默截取指定窗口,确保只获取目标窗口自身内容,不受遮挡。
核心脚本
scripts/stealth_capture.py
使用 python_cell_exec 直接调用函数,无需读取脚本内容:
from stealth_capture import find_window, capture_window_stealth, list_windows
# 列出所有可见窗口
windows = list_windows()
for hwnd, title, left, top, right, bottom in windows:
print(f" - {title}")
# 按关键词模糊匹配并静默截图
info = find_window("微信")
capture_window_stealth(info, "/path/to/output.png")
# 精确匹配
info = find_window("微信", exact=True)
capture_window_stealth(info)
# 截取当前活动窗口
from stealth_capture import find_active_window
info = find_active_window()
capture_window_stealth(info)
核心函数
| 函数 | 说明 | 返回值 |
|---|---|---|
list_windows() |
列出所有可见窗口 | [(hwnd, title, l, t, r, b), ...] |
find_window(keyword, exact=False) |
静默查找窗口 | 元组 or None |
find_active_window() |
获取前台窗口 | 元组 or None |
capture_window_stealth(window_info, path) |
静默截图并保存 | 文件绝对路径 |
参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
keyword |
str | - | 窗口标题关键词 |
exact |
bool | False | True 精确匹配,False 模糊匹配 |
output_path |
str | 自动生成 | 保存路径,支持 .png/.jpg/.bmp |
原理
- 用
EnumWindows获取所有可见窗口及其坐标 - 检测与目标窗口区域重叠的其他窗口
- 用
ShowWindow(hwnd, SW_HIDE)临时隐藏遮挡窗口 - 等待 100ms 让 DWM 桌面合成器刷新
ImageGrab.grab(bbox)截取屏幕区域- 立即
ShowWindow(hwnd, SW_SHOW)恢复所有隐藏窗口
整个过程约 150ms,遮挡窗口会短暂消失后立即恢复。
scripts/capture_window.py 为旧版回退方案(基于 pygetwindow),一般不需要使用。
注意事项
- 仅限 Windows 平台
- 遮挡窗口会短暂闪烁约 150ms(隐藏后立即恢复)
- 不激活目标窗口,不改变前台焦点
- 最小化窗口无法截取,会报错提示