您现在的位置是:网站首页>文章详情文章详情
win32gui的GetWindowRect() 获取窗口坐标不准确问题
inlike2021-11-30【 原创文章 】 浏览(5153) 评论(0) 喜欢(17)
简介windows 7系统开始,Python通过win32gui.GetWindowRect()获取窗口坐标不准确,有一定的误差。
windows 7系统开始,Python通过win32gui.GetWindowRect()获取窗口坐标不准确,有一定的误差。在stackoverflow上有关于此问题的讨论,点击查看链接,大致原因见下所示。
Vista 下未与 WINVER=6 链接的应用程序将在此处收到一组误导性的值,这些值并未考虑 Vista Aero 应用于窗口的“玻璃”像素的额外填充。即使在 Aero Basic(无玻璃)中,这似乎也会发生,以保持尺寸一致性。解决方法(如果不想设置WINVER=6)好像是动态绑定到dwmapi.dll,使用GetProcAddress()获取DwmGetWindowAttribute()函数,并用DWMWA_EXTENDED_FRAME_BOUNDS参数调用来请求正版窗口框架尺寸。
在Python3中可以通过下面的方法来获取准确的坐标:
from ctypes import wintypes
import ctypes
def get_window_pos(hwnd):
try:
f = ctypes.windll.dwmapi.DwmGetWindowAttribute
rect = ctypes.wintypes.RECT()
DWMWA_EXTENDED_FRAME_BOUNDS = 9
f(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.bottom
except WindowsError as e:
raise e
get_window_pos方法的hwnd参数是句柄,返回窗口左上角坐标和高宽。
标签
相关文章
本栏推荐
标签云
猜你喜欢
站点信息
- 建站时间:2019-5-24
- 网站程序:like in love
- 主题模板:《今夕何夕》
- 文章统计:104条
- 文章评论:***条
- 微信公众号:扫描二维码,关注我们