如何检测自动隐藏的任务栏是否可见

How to detect if autohidden taskbar is visible or not?

本文关键字:隐藏 任务栏 是否 何检测 检测      更新时间:2023-10-16

目前我需要在 C++/Qt 中检测设置为"自动隐藏"的任务栏是否在屏幕上可见。我已经尝试了以下解决方案,不幸的是没有成功:

  1. 使用 uState = (UINT) 检查了自动隐藏状态 SHAppBarMessage(ABM_GETSTATE, pabd),这仅返回是否设置了自动隐藏属性

  2. 使用 SystemParametersInfo(SPI_GETWORKAREA, 0, &rectWorkArea, 0) 获取工作区;不幸的是,当任务栏设置为"自动隐藏"时,工作区始终是整个屏幕的大小,即使它实际上在屏幕上可见

  3. Geting AppBarData with SHAppBarMessage(ABM_GETTASKBARPOS, &abd);使用此功能,我可以获取任务栏的大小和坐标,但是即使任务栏是隐藏的,它们也总是像任务栏可见一样返回。

因此,使用这些方法,我无法判断带有"自动隐藏"的任务栏是否在给定时刻在屏幕上可见:-(

我将不胜感激任何帮助:-)

HWND hTaskbarWnd = FindWindow("Shell_TrayWnd", null);
bool isVisible = IsWindowVisible(hTaskbarWnd);

bool IsTaskbarWndVisible() {
HWND hTaskbarWnd = FindWindow("Shell_TrayWnd", null);
HMONITOR hMonitor = MonitorFromWindow(hTaskbarWnd , MONITOR_DEFAULTTONEAREST);
MONITORINFO info = { sizeof(MONITORINFO) };
if (GetMonitorInfo(hMonitor, &info))
{
  RECT rect;
  GetWindowRect(hTaskbarWnd , &rect);
  if ((rect.top >= info.rcMonitor.bottom - 4) ||
      (rect.right <= 2) ||
      (rect.bottom <= 4) ||
      (rect.left >= info.rcMonitor.right - 2))
  return false;
  return true;
}