Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何判断任务切换程序/任务栏中是否会列出一个窗口?_C++_Windows_Taskbar - Fatal编程技术网

C++ 如何判断任务切换程序/任务栏中是否会列出一个窗口?

C++ 如何判断任务切换程序/任务栏中是否会列出一个窗口?,c++,windows,taskbar,C++,Windows,Taskbar,我正在尝试编写一个函数,该函数将HWND作为参数,并返回true,如果该窗口将在任务切换器中列出,即按下Alt+Tab时出现的窗口。我不是100%确定,但我认为任务栏中出现的所有窗口也会出现在任务切换程序中。在子窗口的情况下,我希望它检查它的根祖先窗口 现在我正在检查根窗口是否可见及其样式/扩展样式。下面是一些示例代码: bool VisibleInTaskSwitcher(HWND window) { HWND root = GetAncestor(window, GA_ROOT);

我正在尝试编写一个函数,该函数将
HWND
作为参数,并返回
true
,如果该窗口将在任务切换器中列出,即按下Alt+Tab时出现的窗口。我不是100%确定,但我认为任务栏中出现的所有窗口也会出现在任务切换程序中。在子窗口的情况下,我希望它检查它的根祖先窗口

现在我正在检查根窗口是否可见及其样式/扩展样式。下面是一些示例代码:

bool VisibleInTaskSwitcher(HWND window) {
    HWND root = GetAncestor(window, GA_ROOT);
    
    if (root == NULL || !IsWindowVisible(root)) {
        return false;
    }
    
    long style = GetWindowLong(root, GWL_EXSTYLE);
    
    if (style & WS_EX_APPWINDOW) {
        return true;
    }

    if (style & WS_EX_TOOLWINDOW || style & WS_EX_NOREDIRECTIONBITMAP) {
        return false;
    }

    return true;
}
这个函数正确吗?有没有其他我错过的窗口不会在任务栏中列出的情况?(或者可能是一种边缘情况,即使它没有通过我函数中的一个测试也会如此?)

我在Windows10中对此进行了测试,发现带有扩展样式的Windows似乎也需要被排除在外。这是正确的做法吗