【问题标题】:How to get list or enumerate all handles of unmanaged windows with same class and name如何列出或枚举具有相同类和名称的非托管窗口的所有句柄
【发布时间】:2011-06-04 14:20:12
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: c# pinvoke


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我在您提供的链接中找到了一个链接:mwinapi.sourceforge.net 一些 user32 函数的托管包装器。使用起来更好,然后用 pinvokes 重新编码轮子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2013-05-16
  • 2015-10-29
  • 2011-11-10
  • 1970-01-01
  • 2020-04-05
相关资源
最近更新 更多