1

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

如何使用 EnumChildWindows() 的窗口句柄获取单击控件的类型?我想要做的甚至可能吗?我一直在研究将 Win32 中的 SendMessage() 用于该过程,但似乎没有系统定义的消息可以提供帮助。

4

1 回答 1

1

恐怕这是不可能的。句柄只是指 Windows 需要的窗口的内部数据。没有可用的信息。

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

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

你能以某种方式重申你的问题吗?也许使用远程过程调用?没有高级 WinForms 对象是否可以工作?诸如单击、移动或重命名之类的操作使用普通的 Win32 API。

于 2010-10-11T10:24:18.237 回答