pywinauto capture_as_image添加不需要的边框

时间:2019-02-19 13:48:43

标签: python python-3.x pywinauto

我正在使用 pywinauto 拍摄特定窗口的屏幕截图。

这是我用来记录记事本的代码(法语中的“ Bloc-notes”):

from pywinauto import Application
app = Application().connect(title_re=".*Bloc-notes")
hwin = app.top_window()
hwin.set_focus()
img = hwin.capture_as_image()
img.save('notepad_screenshot.png')

结果如下:

screenshot

红色的“边框”是窗口的背景。 如何安全消除该红色边框?

我尝试配置Windows 10,以便不显示窗口阴影(在“视觉效果设置”中),但对捕获的大小没有影响。

当我精确地看一下捕获时,我可以看到左边界,底边界和右边界为7像素厚。我可以可靠地去除这些像素吗?我所说的“可靠”是:它可以一直工作,并且可以在其他计算机上工作吗?

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

这是我找到的解决方案。

import ctypes
from pywinauto import Application
import win32gui

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

window_title = hwin.window_text()
rect = ctypes.wintypes.RECT()
DWMWA_EXTENDED_FRAME_BOUNDS = 9
ctypes.windll.dwmapi.DwmGetWindowAttribute(
    ctypes.wintypes.HWND(win32gui.FindWindow(None, window_title)),
    ctypes.wintypes.DWORD(DWMWA_EXTENDED_FRAME_BOUNDS),
    ctypes.byref(rect),
    ctypes.sizeof(rect)
)

img = hwin.capture_as_image(rect)
img.save('notepad_screenshot_ok.png')

结果如下:

enter image description here

它已在我运行的所有测试(不同的窗口)上运行。

答案 1 :(得分:0)

Application().connect可以返回窗口集合。

请改为使用app['YOUR TITLE HERE']find_windows

从那里您可以捕获没有这些边界的图像。

您可以从docs中找到更多信息。

相关问题