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

此刻我需要检测在C + + / Qt如果一个任务栏,设置为“自动隐藏”是否在屏幕上可见或不。 我已经尝试过下面的解决scheme,但不幸没有成功:

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

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

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

所以用这些方法,我不能告诉,是否在任何时候任务栏“自动隐藏”是在给定的时刻在屏幕上可见或不 – :

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

Solutions Collecting From Web of "如何检测自动隐藏的任务栏是否可见?"

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