当前位置: 代码迷 >> 综合 >> win32gui.GetWindowRect() 取值不准的解决方案
  详细解决方案

win32gui.GetWindowRect() 取值不准的解决方案

热度:11   发布时间:2024-01-17 12:40:10.0
问题起因

最近在研究游戏脚本,在获取窗口位置时,使用spy++查找得到的窗口得到的边框十分准确;当当我使用win32gui.GetWindowRect()得到矩形边框时,却发现窗口小了许多。

产生原因

看了这篇博客,找到了问题所在。

自从vista系统开始,窗口有毛玻璃特效边框,而GetWindowRect并没有计算上这部分,所以获取的值会偏小

解决方案

原代码:

pos = win32gui.GetWindowRect(hwnd1)

替换代码:

def get_window_rect(hwnd):try:f = ctypes.windll.dwmapi.DwmGetWindowAttributeexcept WindowsError:f = Noneif f:rect = ctypes.wintypes.RECT()DWMWA_EXTENDED_FRAME_BOUNDS = 9f(ctypes.wintypes.HWND(hwnd),ctypes.wintypes.DWORD(DWMWA_EXTENDED_FRAME_BOUNDS),ctypes.byref(rect),ctypes.sizeof(rect))return rect.left, rect.top, rect.right, rect.bottompos = get_window_rect(hwnd1)

不再使用win32gui.GetWindowRect(),而是自己编写函数get_window_rect(),替换原来的函数,以这种方法得出的矩形坐标就是正确的了。

  相关解决方案