gpt4 book ai didi

c++ - 从 Alt + Tab 获取所有窗口,不包括 Metro 窗口 - Windows 8/8.1

转载 作者:行者123 更新时间:2023-11-28 06:13:17 32 4
gpt4 key购买 nike

是否可以从 Alt + Tab 窗口获取所有窗口 hwnd - 除了 Metro?或许 Windows 8 有一些替代方案?

我试图使用 EnumWindows 函数获取所有窗口并将 hwnd 粘贴到 GetAltTabInfo 函数,但它对我不起作用。我从 GetLastError 收到错误消息:“无效的窗口句柄”,因为当您获得 Aero 时此函数 (GetAltTabInfo) 不再可用。启用。这个结论来自这里:GetAltTabInfo usage? .

最佳答案

使用 "Which windows appear in the Alt+Tab list?" article by Raymond Chen ,我已经能够重现窗口列表。

// See http://blogs.msdn.com/b/oldnewthing/archive/2007/10/08/5351207.aspx
BOOL IsAltTabWindow(HWND hwnd)
{
// Start at the root owner
HWND hwndWalk = GetAncestor(hwnd, GA_ROOTOWNER);

// See if we are the last active visible popup
HWND hwndTry;
while ((hwndTry = GetLastActivePopup(hwndWalk)) != hwndTry) {
if (IsWindowVisible(hwndTry)) break;
hwndWalk = hwndTry;
}
return hwndWalk == hwnd;
}

BOOL CALLBACK CbEnumAltTab(HWND hwnd, LPARAM lParam)
{
// Do not show invisible windows
if (!IsWindowVisible(hwnd))
return TRUE;

// Alt-tab test as described by Raymond Chen
if (!IsAltTabWindow(hwnd))
return TRUE;

const size_t MAX_WINDOW_NAME = 256;
TCHAR windowName[MAX_WINDOW_NAME];
if (hwnd == GetShellWindow())
_tcscpy_s(windowName, MAX_WINDOW_NAME, _T("Desktop")); // Beware of localization
else
GetWindowText(hwnd, windowName, MAX_WINDOW_NAME);

// Do not show windows that has no caption
if (0 == windowName[0])
return TRUE;

// Print found window to debugger's output
const size_t MAX_MESSAGE_NAME = 64 + MAX_WINDOW_NAME;
TCHAR message[MAX_MESSAGE_NAME];
_stprintf_s(message, MAX_MESSAGE_NAME, _T("AltTab: %08X %s\n"), hwnd, windowName);
OutputDebugString(message);

return TRUE;
}

void ListAltTabWindows()
{
EnumWindows(CbEnumAltTab, 0);
}

注意事项:

  • 地铁似乎已经被排除在外了
  • 没有检查 WS_EX_TOOLWINDOW
  • 没有检查 WS_EX_APPWINDOW
  • 没有广泛测试

关于c++ - 从 Alt + Tab 获取所有窗口,不包括 Metro 窗口 - Windows 8/8.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30806029/

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