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

Posted

技术标签:

【中文标题】如何检测自动隐藏的任务栏是不是可见?【英文标题】:How to detect if autohidden taskbar is visible or not?如何检测自动隐藏的任务栏是否可见? 【发布时间】:2012-04-10 08:23:34 【问题描述】:

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

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

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

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

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

我会很感激任何帮助:-)

【问题讨论】:

嗯,我不知道为什么,但这看起来像是 Raymond Chen 博客文章中的那种代码。为什么你需要知道这些信息?也许还有另一种方法可以实现您想要的。 如果任务栏可见,你需要知道什么? 【参考方案1】:
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;

【讨论】:

这是否处理屏幕左/右/顶部的 tasbar 的情况?

以上是关于如何检测自动隐藏的任务栏是不是可见?的主要内容,如果未能解决你的问题,请参考以下文章

如何隐藏开始菜单栏

如何从命令行自动隐藏任务栏

win10添加了虚拟串口后自动隐藏了

使自动隐藏的任务栏在窗口最大化而不取消隐藏

如何移动子视图控制器,同时使用自动布局而不是框架隐藏状态栏?

高分:二级菜单栏点出来后迅速自动隐藏掉,速度慢了根本选不到!