我正在使用 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')
结果如下:
红色的“边框”是窗口的背景。 如何安全消除该红色边框?
我尝试配置Windows 10,以便不显示窗口阴影(在“视觉效果设置”中),但对捕获的大小没有影响。
当我精确地看一下捕获时,我可以看到左边界,底边界和右边界为7像素厚。我可以可靠地去除这些像素吗?我所说的“可靠”是:它可以一直工作,并且可以在其他计算机上工作吗?
任何帮助表示赞赏。
答案 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')
结果如下:
它已在我运行的所有测试(不同的窗口)上运行。
答案 1 :(得分:0)
Application().connect
可以返回窗口集合。
请改为使用app['YOUR TITLE HERE']
或find_windows。
从那里您可以捕获没有这些边界的图像。
您可以从docs中找到更多信息。