如何枚举进程中的所有窗口?

我需要捕获第三方进程的特定窗口。 我可以find主窗口句柄Process.MainWindowHandle,但我可以用来列出其他窗口?

我正在使用C#/ .NET

Solutions Collecting From Web of "如何枚举进程中的所有窗口?"

.NET(C#):当你只有一个进程句柄或PID时获取子窗口?

EnumChildWindows函数可能会帮助你。 孩子的窗户也可以有孩子等等。

还有GetWindow和EnumThreadWindows

另一个帖子在这里有一些更多的细节: 获取进程的所有窗口句柄

第三方应用程序启动其他窗口不作为子窗口。

使用Visual Studio附带的Spy ++工具可以找出什么是结构。

在此之后,我能够使用WindowClassName(取自Spy ++)使用FindWindowEx函数找到必要的窗口:lastWindows = FindWindowEx(IntPtr.Zero,lastWindows,m.WindowClassName,null);

使用Win32 API EnumWindows (如果你想EnumChildWindows )

[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)] public static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr extraData); 

然后使用Win32 API GetWindowThreadProcessId检查每个窗口属于哪个进程

 [DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)] public static extern int GetWindowThreadProcessId(HandleRef handle, out int processId);