检测 Win+Tab 任务视图
Detect Win+Tab Task View
在 Windows 10 上,您可以按 Win+Tab 以 "Task View" 查看所有 windows。我正在尝试检查这是否在任何给定时间处于活动状态。我曾尝试使用带有 WH_KEYBOARD_LL
的低级键盘挂钩,但这只允许我检测按键,而不是切换器是否处于活动状态。我查看了 Windows DWM API,也没有找到其他任何东西。
我也尝试过使用 EnumWindows()
和 EnumChildWindows(GetDesktopWindow(), ...)
,但没有发现显示和隐藏任务视图的输出有任何区别。
是否有任何准确的方法来检测是否正在显示?
这是一个与我的 Windows 版本(1709 build 16299.125)非常一致的解决方案,不需要调用 EnumChildWindows
的处理器密集型方法:
bool isTaskView() {
//Get foreground window's name
HWND fgWindow = GetForegroundWindow();
TCHAR windowName[MAX_PATH] = L"";
GetWindowText(fgWindow, windowName, MAX_PATH);
//Compare with magic string name of Task View's window
std::wstring nameStr(windowName);
return nameStr == L"Task View";
}
在 Windows 10 上,您可以按 Win+Tab 以 "Task View" 查看所有 windows。我正在尝试检查这是否在任何给定时间处于活动状态。我曾尝试使用带有 WH_KEYBOARD_LL
的低级键盘挂钩,但这只允许我检测按键,而不是切换器是否处于活动状态。我查看了 Windows DWM API,也没有找到其他任何东西。
我也尝试过使用 EnumWindows()
和 EnumChildWindows(GetDesktopWindow(), ...)
,但没有发现显示和隐藏任务视图的输出有任何区别。
是否有任何准确的方法来检测是否正在显示?
这是一个与我的 Windows 版本(1709 build 16299.125)非常一致的解决方案,不需要调用 EnumChildWindows
的处理器密集型方法:
bool isTaskView() {
//Get foreground window's name
HWND fgWindow = GetForegroundWindow();
TCHAR windowName[MAX_PATH] = L"";
GetWindowText(fgWindow, windowName, MAX_PATH);
//Compare with magic string name of Task View's window
std::wstring nameStr(windowName);
return nameStr == L"Task View";
}