pywinauto capture_as_image 添加不需要的边框

pywinauto capture_as_image adds unwanted borders

我正在使用 pywinauto 截取特定 window 的屏幕截图。

这是我用来捕获记事本的代码("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')

结果如下:

红色"border"是window的背景。 如何安全地消除这个红色边框?

我尝试配置 Windows 10 以便不显示 windows 阴影(在 "visual effects settings" 中),但它对捕获的大小没有影响。

当我仔细查看捕获时,我可以看到左、下和右边框的厚度为 7 像素。我可以可靠地删除这些像素吗? "reliably" 我的意思是:它会一直工作,并且在其他计算机上工作吗?

感谢任何帮助。

这是我找到的解决方案。

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')

结果如下:

它在我 运行 的所有测试中都有效(不同 windows)。

Application().connect 可以 return 集合 windows.

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

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

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