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

使用pywinauto capture_as_image截图出现多余边框的解决求助

解决pywinauto截图中窗口边框的问题

我明白你遇到的麻烦——用pywinauto截取法语记事本(Bloc-notes)窗口时,总是带着红色的边框,调整视觉效果也没用。既然你已经定位到边框的像素尺寸,我来给你两个方案,重点说下更可靠、跨电脑通用的那个。

方案1:固定像素裁剪(仅限当前环境)

如果你只是在自己的电脑上临时使用,且确认左、下、右边框都是7像素,可以直接用Pillow对截图进行裁剪。但要注意:这个方法只适用于当前系统的主题和设置,换台电脑或修改主题后,边框厚度可能变化,就会失效。

修改后的代码示例:

from pywinauto import Application
from PIL import Image  # 需要先安装Pillow:pip install pillow

app = Application().connect(title_re=".*Bloc-notes")
hwin = app.top_window()
hwin.set_focus()
img = hwin.capture_as_image()

# 裁剪左7、下7、右7像素,顶部若无需裁剪则保持0
# crop参数格式为(left, top, right, bottom)
img_cropped = img.crop((7, 0, img.width - 7, img.height - 7))
img_cropped.save('notepad_screenshot.png')

方案2:捕获窗口客户区(可靠、跨电脑)

这个方法才是真正通用的解决方案,它直接获取窗口的客户区域(即实际显示文本的部分,不包含边框、标题栏、焦点边框这些非客户元素),不管Windows版本、主题如何,都能准确截取内容。

核心是用pywinauto的client_rect()方法获取客户区的坐标,再对截图进行裁剪:

完整代码示例:

from pywinauto import Application
from PIL import Image

app = Application().connect(title_re=".*Bloc-notes")
hwin = app.top_window()
hwin.set_focus()
img = hwin.capture_as_image()

# 获取窗口客户区的矩形坐标
client_rect = hwin.client_rect()
# 裁剪出客户区:参数顺序为(left, top, right, bottom)
img_cropped = img.crop((client_rect.left, client_rect.top, client_rect.right, client_rect.bottom))
img_cropped.save('notepad_screenshot.png')

为什么这个方法可靠?

client_rect()是pywinauto调用Windows API获取的窗口客户区信息,它会自动排除所有非客户区域(包括你看到的红色焦点边框、窗口边框、标题栏)。不管你的电脑是Windows 10还是11,用的是默认主题还是自定义主题,这个坐标都是准确的,完全不需要依赖固定的像素值。

另外,你提到的红色边框其实是窗口获得焦点时的系统提示边框,set_focus()会激活窗口导致它出现,但客户区本身不包含这个边框,所以裁剪后自然就看不到了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:47:16