是否有Win32 API方法来获取所有打开的窗口的枚举?似乎一定不知道从哪里开始寻找。
答案 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;
}