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

时间:2010-02-17 14:30:14

标签: c# windows process

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

我正在使用C#/ .NET

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

EnumChildWindows功能可能会帮助您。儿童窗户也可能有孩子等等。

还有GetWindowEnumThreadWindows

此处的另一篇文章包含更多详情:Get handles to all windows of a process

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:2)

使用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);