tom*_*mak 1 c++ windows qt taskbar
目前,我需要在C ++ / Qt中检测设置为“自动隐藏”的任务栏在屏幕上是否可见。我已经尝试了以下解决方案,但是没有成功:
使用uState =(UINT)SHAppBarMessage(ABM_GETSTATE,pabd)检查自动隐藏状态,这仅返回是否设置了自动隐藏属性
使用SystemParametersInfo(SPI_GETWORKAREA,0,&rectWorkArea,0)获取工作区;不幸的是,当任务栏设置为“自动隐藏”时,工作区始终是整个屏幕的大小,即使它实际上在屏幕上可见
使用SHAppBarMessage(ABM_GETTASKBARPOS,&abd);获取AppBarData;使用此功能,我可以同时获取任务栏的大小和坐标,但是,即使隐藏了任务栏,也总是将其返回,就好像任务栏是可见的一样。
因此,使用这些方法我无法分辨,是否在给定的时间在屏幕上显示了启用“自动隐藏”的任务栏:-(
我将不胜感激任何帮助 :-)
HWND hTaskbarWnd = FindWindow("Shell_TrayWnd", null);
bool isVisible = IsWindowVisible(hTaskbarWnd);
Run Code Online (Sandbox Code Playgroud)
要么
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;
}
Run Code Online (Sandbox Code Playgroud)