pywin32: GetWindowRect의 크기가 실제보다 작을 때
반응형
pywin32를 사용해서 윈도우의 핸들을 얻어 캡쳐를 하고자 할 때 캡쳐 범위를 지정하기 위해 디바이스에서 창이 그리는 사각형을 출력하는 win32.win32gui.GetWindowRect(hwnd)
나 win32.win32gui.GetWindowRect(hwnd)
를 사용하게 됩니다.
def get_window_rect(hwnd):
return win32gui.GetWindowRect(hwnd)
그러나 이 값을 이용해서 캡쳐를 해보면 창의 일부가 잘리는 것을 볼 수 있습니다.

스택오버플로우(영문)에서 찾아보니 윈도우 7 이후 그래픽 인터페이스 구현이 달라지는 바람에 벌어지는 일이라고 합니다. 췬도우의 실제 크기보다 작게 인식하는 바람에 생긴 문제인데요. spy++등을 이용하여 해당 값을 알고 있다면 해당하는 값을 하드코딩하여 확인해볼 수 있습니다.
혹은 아래와 같은 방식으로 같은 기능을 하는 함수를 만들 수 있습니다.
from ctypes import windll, wintypes, byref, sizeof
def get_window_rect(hwnd):
""" 핸들에 대응하는 윈도우의 좌표정보를 반환한다
param:
<int> hwnd: 윈도우 핸들
return:
<tuple> x1, y1, x2, y2
"""
f = windll.dwmapi.DwmGetWindowAttribute
rect = wintypes.RECT()
DWMWA_EXTENDED_FRAME_BOUNDS = 9
f(wintypes.HWND(hwnd),
wintypes.DWORD(DWMWA_EXTENDED_FRAME_BOUNDS),
byref(rect),
sizeof(rect)
)
return rect.left, rect.top, rect.right, rect.bottom

반응형
'프로그래밍 > 파이썬' 카테고리의 다른 글
Python 패키지 개발일지 01: 패키지 이름 정하기 (0) | 2019.12.19 |
---|---|
Tkinter: 제목표시줄 교체 (0) | 2019.12.09 |
Python: 윈도우와 핸들 목록 얻기 (1) | 2019.12.02 |
파이썬 매크로 제작: (1) 개발환경 구성 (0) | 2019.12.01 |
아나콘다 환경에서 여러 버전의 파이썬 사용하기 (0) | 2019.11.22 |
댓글