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 找到更多信息。
我正在使用 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 找到更多信息。