如何使用Python / PyQT / Win32获取Windows任务栏的高度

goo*_*man 2 python windows winapi pyqt

我试图使我的GUI程序与Windows上屏幕的右下角对齐。当任务栏未隐藏时,我的程序将仅位于任务栏顶部!

使用Python / PyQT / Win32时,如何:

  1. 检查任务栏的自动隐藏功能是否打开
  2. 获取任务栏的高度

Ste*_*ica 7

正如David Heffernan提到的那样,您可以使用GetMonitorInfowith 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]))
Run Code Online (Sandbox Code Playgroud)

工作区大小为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]))
Run Code Online (Sandbox Code Playgroud)

任务栏的高度为40。

说明

首先,我们需要创建一个引用主监视器的句柄。主监视器的左上角始终为0,0,因此我们可以使用:

primary_monitor = MonitorFromPoint((0,0))
Run Code Online (Sandbox Code Playgroud)

我们使用检索有关监视器的信息GetMonitorInfo()

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

监视器信息以形式返回dict。前两个条目将监视器大小和工作区域大小表示为元组(x位置,y位置,高度,宽度)。

work_area = monitor_info.get("Work")
# (0, 0, 1366, 728)
Run Code Online (Sandbox Code Playgroud)


Dav*_*nan 4

我认为您需要为感兴趣的监视器调用GetMonitorInfo 。然后,您需要从MONITORINFO.rcWork中读取工作区。这将排除为任务栏保留的监视器的任何部分以及实际上任何其他保留区域。

我认为您不需要担心自动隐藏,因为 GetMonitorInfo 应该考虑到这一点。换句话说,当启用自动隐藏时,工作区域将等于监视器区域。