(Python 2.7)获取UI标题栏大小

时间:2018-07-11 13:54:34

标签: python python-2.7 titlebar win32gui

前提

我使用参数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()并将其值减去预期的大小不是解决方案。

图片以说明我的问题

Image to clarify what I am searching for (image has been modified to hide the program and a few pieces of information)

其他问题

不同的操作系统的标题栏边框的大小是否不同?

根据我自己的计算(未经官方确认的信息),默认Windows 10的边框大小为3px,标题栏的高度为26px 。有人可以确认/斥责此信息吗?

1 个答案:

答案 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是没有标题栏或不可见边框的矩形

来源: GetWindowRect GetClientRect