pywinauto capture_as_image добавляет нежелательные границы - PullRequest
0 голосов
/ 19 февраля 2019

Я использую 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 пикселей.Могу ли я надежно удалить эти пиксели?Под надёжностью я подразумеваю: всегда ли это будет работать и работать на других компьютерах?

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 февраля 2019

Вот решение, которое я нашел.

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

Он работал навсе тесты, которые я запускаю (разные окна).

...