簡體   English   中英

如何使用 Python/PyQT/Win32 獲取 Windows 任務欄的高度

[英]How to get the height of Windows Taskbar using Python/PyQT/Win32

我試圖讓我的 GUI 程序與 Windows 屏幕的右下角對齊。 當任務欄沒有隱藏時,我的程序只會站在任務欄的頂部!

使用 Python/PyQT/Win32 時,我如何:

  1. 檢查任務欄的自動隱藏功能是否開啟
  2. 獲取任務欄的高度

正如David Heffernan 提到的,您可以使用GetMonitorInfopywin32來檢索監視器大小。 特別是,工作區將排除任務欄的大小。

獲取工作區大小(桌面減去任務欄):

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)

我認為您需要為感興趣的監視器調用GetMonitorInfo 然后您需要從MONITORINFO.rcWork 中讀取工作區。 這將排除為任務欄保留的監視器的任何部分以及任何其他保留區域。

我認為您不需要擔心自動隱藏,因為 GetMonitorInfo 應該考慮到這一點。 換句話說,當啟用自動隱藏時,工作區將等於監控區。

您可以使用QDesktopWidget檢索有關系統屏幕的信息並從總屏幕區域中減去工作區域。

import sys
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()之間的差異,以找出任務欄(以及任何其他保留空間)的大小。

當任務欄設置為自動隱藏時,可用的幾何圖形不知道任務欄的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM