如何获取列表或枚举具有相同类和名称的非托管窗口的所有句柄

使用pinvoke我可以轻松找到具有特定类和名称的窗口的句柄:

[DllImport("user32.dll")] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); IntPtr hWnd = FindWindow("Foo Class", "Foo Window"); 

如果只有0或1个匹配的窗口,上面的代码是完美的。 但是,我正在使用的非托管应用程序跨越多个窗口。 多次调用FindWindow每次都返回相同的窗口句柄。

我需要做什么才能获得具有特定类和名称的所有窗口。

我也会接受替代解决方案同一目标的答案。 (我想也许可以通过找到应用程序的进程ID然后获取所有顶级窗口,并筛选所需的窗口来完成)。

您可能需要调用EnumWindows来枚举所有顶级窗口。 你必须使用他们的窗口句柄来获取他们的标题和窗口类信息。

请参阅http://www.pinvoke.net/default.aspx/user32/enumwindows.html以获取与您所要求的内容非常接近的示例。