从窗口句柄获取自定义.NET类的组件类型

时间:2010-10-11 10:16:09

标签: c# .net winapi ui-automation

我需要在另一个进程中看到组件类型,即已编程的类的名称,单击控件的名称。我需要类型,以便我可以对点击的控件做出反应,然后执行一些自动化任务。 现在我正在做以下事情: 1.我从Win32的FindWindow()中找到进程的主窗口句柄。 2.然后,我也从Win32调用EnumChildWindows(),并获取主窗口句柄的所有子项的窗口句柄。 现在它变得棘手了。当我调用GetClassName()时,它返回WindowsForms10.STATIC.app [...],因为我试图读取的控件是自定义的。

如何使用EnumChildWindows()的窗口句柄获取单击控件的类型?我甚至想做什么? 我一直在研究从Win32使用SendMessage()到进程,但似乎没有系统定义的消息可以帮助。

1 个答案:

答案 0 :(得分:1)

我担心这是不可能的。句柄只是指Windows所需窗口的内部数据。除此之外没有其他信息。

您可以获取类名,但它既不标准也不唯一。大多数非按钮,列表等基本功能控件的控件都是从非常原始的控件派生出来的,即“静态”。但同样,没有关于可用的高级WinForms控件的信息。

这导致了这样一个事实:即使您知道类型,也不能只是转换指针/句柄,因为它背后没有数据。

你能以某种方式重述你的问题吗?也许使用远程过程调用?没有高级WinForms对象吗?点击,移动或重命名等工作都可以使用普通的Win32 API。