(Python 2.7) Получить размер строки заголовка пользовательского интерфейса

Помещение

Я запускаю 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. Кто-нибудь может подтвердить/опровергнуть эту информацию?


person Programer Beginner    schedule 11.07.2018    source источник


Ответы (1)


Вариант 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 — это прямоугольник без заголовка или невидимых границ.

Источник: GetWindowRect GetClientRect

person Adam Saudagar    schedule 15.02.2019