(Python2.7)获取UI标题栏大小

2024-04-18 17:51:02 发布

您现在位置:Python中文网/ 问答频道 /正文

前提

我使用参数-width 640 -height 480启动一个some program.exe,这会导致程序以指定的大小启动。在

然后我想验证程序是否以指定的大小启动,因此使用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)

附加问题

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

根据我自己的计算(信息未经正式确认),在默认的Windows10中,边框的大小是3px,标题栏的高度是26px。有人能证实/指责这个信息吗?在


Tags: 程序信息参数someprogramwidthexe边框
1条回答
网友
1楼 · 发布于 2024-04-18 17:51:02

选项1: 你可以硬编码,并给它固定的偏移量,从左到右和下8像素,从上到上31像素,以删除不可见的边框和标题栏。在

但是这样当你改变视窗的比例时,它将不再正常工作,如果你自己编写程序来使用程序,这个选项是很好的。如果您希望程序与多个刻度兼容,请尝试选项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

资料来源: GetWindowRectGetClientRect

相关问题 更多 >