枚举桌面上的所有窗口句柄

时间:2009-06-23 14:31:51

标签: c windows winapi

是否有Win32 API方法来获取所有打开的窗口的枚举?似乎一定不知道从哪里开始寻找。

3 个答案:

答案 0 :(得分:5)

EnumWindows()就是为了这个。你打电话给它并提供一个回调。它为每个找到的窗口调用回调,并将句柄传递给该窗口。

然后,您可以使用句柄查询窗口参数,并确定它是您感兴趣的还是对它执行某些操作。

答案 1 :(得分:3)

您需要在user32.dll中使用EnumDesktopWindows功能。

这里有一些C#代码可以帮助您指出正确的API调用。我不确定这会是怎样的,但你明白了。

[DllImport("user32.dll")]
private static extern int EnumDesktopWindows(IntPtr hDesktop, EnumWindowsProc ewp, int lParam);

答案 2 :(得分:0)

我认为一个例子可以更清楚地了解这个过程

#include <windows.h>

BOOL CALLBACK printVisibleWindows(HWND wnd, LPARAM lParam)
{
    if(!IsWindowVisible(wnd))return 1;
    int length = GetWindowTextLength(wnd);
    if(!length)return 1;
    length++;
    TCHAR *buffer = (TCHAR*)malloc(length);
    GetWindowText(wnd, buffer, length);
    printf("%p %s\n", wnd, buffer);
    free(buffer);
    return 1;
}

int main()
{
    DWORD dwThreadId = GetCurrentThreadId();
    HDESK hDesktop = GetThreadDesktop(dwThreadId);
    EnumDesktopWindows(hDesktop, printVisibleWindows, 0);
    return 0;
}