Как получить высоту панели задач Windows, используя Python / PyQT / Win32 - PullRequest
2 голосов
/ 05 декабря 2010

Я пытаюсь выровнять свою программу с графическим интерфейсом в правом нижнем углу экрана в Windows.Когда панель задач не скрыта, моя программа будет просто стоять над панелью задач!

При использовании Python / PyQT / Win32, как я могу:

  1. Проверить, не скрывается ли панель задач автоматическифункция включена
  2. Получить высоту панели задач

Ответы [ 3 ]

5 голосов
/ 31 июля 2018

Как отметил Дэвид Хеффернан , вы можете использовать GetMonitorInfo с pywin32, чтобы получить размер монитора.В частности, рабочая область исключает размер панели задач.

Чтобы получить размер рабочей области (рабочий стол минус панель задач):

from win32api import GetMonitorInfo, MonitorFromPoint

monitor_info = GetMonitorInfo(MonitorFromPoint((0,0)))
work_area = monitor_info.get("Work")
print("The work area size is {}x{}.".format(work_area[2], work_area[3]))

Размер рабочей области 1366x728.

Чтобы получить высоту панели задач:

from win32api import GetMonitorInfo, MonitorFromPoint

monitor_info = GetMonitorInfo(MonitorFromPoint((0,0)))
monitor_area = monitor_info.get("Monitor")
work_area = monitor_info.get("Work")
print("The taskbar height is {}.".format(monitor_area[3]-work_area[3]))

Высота панели задач составляет 40.

Объяснение

Сначала нам нужно создать дескриптор, ссылающийся на основной монитор.Основной монитор всегда имеет свой левый верхний угол 0,0 , поэтому мы можем использовать:

primary_monitor = MonitorFromPoint((0,0))

Мы получаем информацию о мониторе с помощью GetMonitorInfo().

monitor_info = GetMonitorInfo(primary_monitor)
# {'Monitor': (0, 0, 1366, 768), 'Work': (0, 0, 1366, 728), 'Flags': 1, 'Device': '\\\\.\\DISPLAY1'}

Информация о мониторе возвращается как dict.Первые две записи представляют размер монитора и размер рабочей области в виде кортежей (позиция x, позиция y, высота, ширина).

work_area = monitor_info.get("Work")
# (0, 0, 1366, 728)
3 голосов
/ 05 декабря 2010

Я думаю, вам нужно позвонить GetMonitorInfo для интересующего монитора.Затем вам нужно прочитать рабочую область из MONITORINFO.rcWork .Это исключит любую часть монитора, зарезервированную для панели задач, и даже любые другие зарезервированные области.

Я не думаю, что вам нужно беспокоиться об автокрытии, потому что GetMonitorInfo должен учитывать это.Другими словами, когда автоматическое скрытие включено, рабочая область будет равна области монитора.

0 голосов
/ 08 октября 2018

Вы можете использовать QDesktopWidget, чтобы получить информацию об экранах системы и вычесть рабочую область из общей области экрана.

from PyQt5.QtWidgets import QApplication

app = QApplication(sys.argv)
dw = app.desktop()  # dw = QDesktopWidget() also works if app is created
taskbar_height = dw.screenGeometry().height() - dw.availableGeometry().height()

Однако, если панель задач находится по бокам экрана, это вернет ноль, что не особенно полезно.Чтобы решить эту проблему, найдите разницу между screenGeometry() и availableGeometry(), чтобы найти размер панели задач (и любых других зарезервированных пространств).

Когда для панели задач установлено автоматическое скрытие, доступная геометрия не распознаетсяразмера панели задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...