我正在研究一个小的宏记录/重放工具,它可以自动化我们拥有的一些非常古老的Visual Basic 6 GUI。为此,我通过名称来识别控件(即控件的name
属性的值,即)。如何获得给定其HWND的Visual Basic控件的名称?
该工具的一部分需要根据HWND来确定控件的名称。对于使用VB.NET完成的较新的Visual Basic应用程序,我可以使用WM_GETCONTROLNAME窗口消息。这很好地工作。
但是,此消息不被旧窗口所理解。有没有什么办法来控制Visual Basic 6应用程序?一个不需要在GUI过程中的解决方案将是可取的,但如果我有一个解决方案只能在GUI过程中使用,那么这也是可以接受的(因为我可以自己做注射)。
UPDATE:有一件事我只是想,这个温和的成功:我用AccessibleObjectFromWindow检查,显示给定的HWND对象的IAccessible接口的实现。如果我得到一个实现(似乎许多[所有?] Visual Basic控件实现此接口),我使用accName属性读出“可访问的名称”。有时候这会产生一个有用的字符串,但通常不会。
这些都是虔诚的建议,谢谢!现在看来我需要挂钩进程(我可以这样做),然后直接访问Form对象。我不知道该怎么做,但几个月前已经做了类似的事情,所以它可能会解决。 – 2010-07-30 08:17:28