gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:09:07 25 4
gpt4 key购买 nike

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

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

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

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

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

如果有任何帮助,我将不胜感激:-)

最佳答案

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

关于c++ - 如何检测自动隐藏的任务栏是否可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com