2010-10-11 57 views
1

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

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

回答

1

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

你可以得到类名,但它既不标准也不唯一。大部分不是基本功能控件(如按钮,列表等)的控件都是从一个非常原始的控件派生而来的,即“静态”。但是,又没有关于可用的高级别WinForms控件的信息。

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

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

+0

非常感谢您的快速回答。我一直在Win32 API中阅读很多,但没有运气。 :(我需要查看顶级类,以便我可以预测用户想要做什么,我不需要进一步与控件交互,我已经编写了一个Hook来读取应用程序中鼠标的位置。然后,我需要做的是读取哪个组件类型被单击,由于属性设置不正确,Casting到AutomationElement也没有帮助,我看到ManagedSpyLib可以读取组件类型,但它尚未被编译。 NET 4.0所以我需要自己编程 – prettyCode 2010-10-11 10:42:14

+0

如果你找到一个有用的答案,你可以点击向上箭头,如果它回答你的问题,请点击箭头下面的绿色选中标记。 – msteiger 2010-10-11 11:57:11