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

时间:2012-04-10 08:23:35

标签: c++ windows qt taskbar

目前我需要在C ++ / Qt中检测是否在屏幕上显示设置为“autohide”的任务栏。我已经尝试过以下解决方案,遗憾的是没有成功:

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

  2. 使用SystemParametersInfo获取工作区(SPI_GETWORKAREA,0,& rectWorkArea,0);不幸的是,当任务栏设置为“autohiden”时,工作区总是具有整个屏幕的大小,即使它实际上在屏幕上可见

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

  4. 所以我用这些方法无法判断,“自动隐藏”的任务栏是否在屏幕上显示的时刻是否可见:-(

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

1 个答案:

答案 0 :(得分:6)

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;
}