我需要做一个对象浏览器/操纵器,类似于 TestComplete 中可用的浏览器/操纵器,即列出任何正在运行的外部应用程序中的所有对象及其属性,并能够更改它们的属性,所有这些都在运行时期间进行当然。
虽然 MSAA/IAccessible 可以读取对象,但据我所知,它只能返回可见对象,而不能更改其属性。
使用 WinAPI,我无法读取没有句柄的对象,例如标签。
理想情况下,我希望在 Delphi 中完成此操作,但任何其他语言建议都是可以接受的。
我想要做的事情的示例(这是在 TestComplete 中完成的):
这项任务并不容易。如果您想做到这一点,您需要使用特定的方法来获取您想要使用的每个应用程序框架(.NET、MFC、VCL 等)的数据。虽然其中一些方法非常简单(例如 .NET 和 Java 的反射),但其他一些方法可能更复杂并且没有像 VCL 那样进行记录。 TestComplete 将其自己的挂钩加载到目标进程内存中,并通过这些模块检索有关此应用程序的信息。
此外,据我所知,TestComplete 可以读取被测试应用程序的各种类型的调试信息,并在公开对象及其成员时使用它。
使用 IAccessible 和 Win API 是一种更简单的方法,尽管在某些情况下不太有效。您提到您无法使用 Win API 从标签中获取任何信息。发生这种情况是因为 VCL 应用程序中的 TLabel 对象不是窗口对象。