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

时间:2011-06-04 14:20:12

标签: c# pinvoke

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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