前提
我使用参数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
。有人可以确认/斥责此信息吗?
答案 0 :(得分:0)
选项1: 您可以硬编码并将其固定为左,右,下分别为8px和顶部为31px的偏移量,以从顶部删除不可见的边框和标题栏。
但是通过这种方式,当您更改窗口比例时,它将不再正常工作,如果您自己编写代码使用该程序,则此选项非常有用。如果您希望程序与多个刻度兼容,请尝试选择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是没有标题栏或不可见边框的矩形