前提
我使用参数some program.exe启动-width 640 -height 480,这将导致程序以指定的大小启动。
然后,我想验证是否以指定的大小启动了这个程序,所以我使用win32gui.GetWindowRect()计算窗口大小:
>>> r = win32gui.GetWindowRect(HWND)
>>> w = r[2] - r[0]
>>> h = r[3] - r[1]
>>> print w,h
646 509大小不匹配。我猜想这很可能是由于标题栏造成的。
我的问题是:如何得到标题栏的大小?
注意:我需要知道标题栏的大小,以便验证程序的大小,因此使用win32gui.GetWindowRect()并用预期的大小减去它的值并不是一个解决方案。
图片来澄清我的问题

附加问题
不同的操作系统是否有不同大小的标题栏、和边框?
根据我自己的计算(未正式确认的信息)在默认情况下Windows 10,边框的大小为3px,标题栏的高度为26px。有人能证实/谴责这一信息吗?
发布于 2019-02-15 10:28:35
选项1:您可以编写硬代码,并将其从左、右和底部固定为8 8px,从顶部为31 8px,以从顶部移除不可见的边框和标题栏。
但是这种方式,当你改变窗口的比例,它将不再正常工作,这个选项是伟大的,如果你是编码使用程序自己。如果您希望该程序与多个比例兼容,请尝试选项2。
备选案文2:
您可以使用GetClientRect获得没有标题栏和不可见边框的窗口大小,然后可以使用它来计算偏移量。
rect = win32gui.GetWindowRect(hwnd)
clientRect = win32gui.GetClientRect(hwnd)
windowOffset = math.floor(((rect[2]-rect[0])-clientRect[2])/2)
titleOffset = ((rect[3]-rect[1])-clientRect[3]) - windowOffset
newRect = (rect[0]+windowOffset, rect[1]+titleOffset, rect[2]-windowOffset, rect[3]-windowOffset)在这里,newRect是没有标题栏或不可见边框的rect
资料来源:GetWindowRect GetClientRect
https://stackoverflow.com/questions/51287338
复制相似问题