Winapi GetAltTabInfo使用情况?

Winapi GetAltTabInfo使用情况?,winapi,Winapi,我无法使用GetAltTabInfo。可能是个愚蠢的错误,但这有什么错 HWND taskSwitcher = FindWindow(L"TaskSwitcherWnd", L"Task Switching"); ALTTABINFO altTabInfo = {}; altTabInfo.cbSize = sizeof(ALTTABINFO); GetAltTabInfo(taskSwitcher, -1, &altTabInfo, NULL, 0); 我已经验证了taskSwitc

我无法使用GetAltTabInfo。可能是个愚蠢的错误,但这有什么错

HWND taskSwitcher = FindWindow(L"TaskSwitcherWnd", L"Task Switching");
ALTTABINFO altTabInfo = {};
altTabInfo.cbSize = sizeof(ALTTABINFO);
GetAltTabInfo(taskSwitcher, -1, &altTabInfo, NULL, 0);
我已经验证了taskSwitcher是调用FindWindow后的任务切换窗口(无论它是否可见)。在调用GetAltTabInfo之后,altTabInfo的所有字段都保持为0,除了cbSize,该值由sizeof(altTabInfo)的赋值设置为40。我正在Windows7机器上尝试这个

提取窗口数的其他方法

谢谢


编辑:好的,我刚刚意识到我可能会得到一些错误信息。GetAltTabInfo调用的结果值实际上是0,如果我为hwnd参数指定NULL(它毕竟被定义为u in_opt),则GetLastError将为我提供1400(无效窗口句柄)或1168(未找到元素)。所以我想我走错窗户了。如果不是FindWindow(L“TaskSwitcherWnd”,L“Task Switching”)返回的任务,那么正确的任务是什么?MSDN只告诉我有关hwnd参数的信息,即“此窗口必须是应用程序切换窗口”。

我不知道GetAltTabInfo,但您可以使用它搜索顶级窗口并对其进行计数。这将告诉您Alt Tab窗口中有多少个窗口…

在使用Win32 API函数时,您必须始终检查错误。GetAltTabInfo返回BOOL,返回FALSE时调用GetLastError():

BOOL ok = GetAltTabInfo(hWnd, -1, &altTabInfo, NULL, 0);
if (!ok) {
    int err = GetLastError();
    Log(err);   // Or whatever you use
    return false;
}

我想您会看到错误1400,“无效的窗口句柄”。在我的计算机上,不接受EnumWindows()枚举的任何窗口句柄。我的结论是,如果启用了Aero,那么这个API将不再可用。我找不到对此的独立确认。

至于它的价值,正如mokubai所知,即使启用win 7 aero(左alt+点击右alt+tab(…我不是在开玩笑!!)您也可以看到老式的alt tab窗口。在该窗口可见的情况下,GetAltTabInfo中的hwnd参数是不相关的,在这些情况下,您仍然可以获取Alt tab信息。

谢谢,是的。我甚至发现了一些关于如何判断一个窗口是否是alt+tab窗口之类的片段,但是如果我能找到一些有效的方法,比如在alt-tab窗口中获取窗口的数量,我会很高兴。这不完全是个好消息,但你得到的相同结果告诉我应该开始寻找其他地方。谢谢你,汉斯。