windows8 metro app窗口查找

EnumWindows枚举出来的窗口并不包含metro app,需要直接使用FindWindowsEx:

#include <windows.h>
#include <locale.h>

BOOL
CALLBACK
EnumWindowsProc(
    _In_  HWND hwnd,
    _In_  LPARAM lParam
    )
{
    TCHAR WindowsText[MAX_PATH];

    GetWindowText(hwnd, WindowsText, MAX_PATH);

    _tprintf_s(WindowsText);
    _tprintf_s(TEXT("\n"));

    return TRUE;
}

VOID
EnumWindowsWithMetro(
    __in WNDENUMPROC EnumFunc,
    __in LPARAM lParam
    )
{
    HWND ChildWindow = NULL;

    while (ChildWindow = FindWindowEx(NULL, ChildWindow, TEXT("Windows.UI.Core.CoreWindow"), NULL))
    {
        if (!EnumFunc(ChildWindow, lParam))
            return;
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "zh-CN");

    EnumWindowsWithMetro(EnumWindowsProc, 0);

    return 0;
}

Windows.UI.Core.CoreWindow为metro app窗口类名。

运行效果图:

image_thumb3

StarDock出品的软件ModernMix可以把metro app软件窗口化,估计是使用类似的原理。

Technorati 标记: windows 8,metro
posted @ 2013-04-30 20:08  nevergone+  阅读(491)  评论(0编辑  收藏  举报