如何在第三方Delphi应用程序中获取控件的属性列表和值?

时间:2012-04-13 16:58:33

标签: delphi process rtti testcomplete inspection

我希望获得有关第三方应用程序控件的信息,例如其属性列表及其值:类似于RTTI信息,但适用于第三方Delphi应用程序。

我知道这是可能的。例如,TestComplete具有ObjectSpy窗口,该窗口可以提供有关控件的许多有用信息,包括RTTI信息。怎么办呢?

enter image description here

编辑:要解释我为什么要调查此问题...我是TestComplete / TestExecute的注册用户,我确实喜欢......大部分内容。我可以克服一些小问题,但对我来说一个主要问题是他们的license verification system要求我总是为了运行而拥有物理计算机(不是虚拟机)许可证服务器,以便TestExecute可以在晚上运行。由于我有基本的测试需求(比较屏幕截图并检查基本的Delphi组件的属性),我想知道创建我自己的私有非常简单的“类似TestExecute”的应用程序是多么困难。

2 个答案:

答案 0 :(得分:3)

为了更进一步,我建议您在SO

上找到这些相关资源

我强烈建议您移植到Delphi这个名为Get Process Info with NtQueryInformationProcess的c ++项目:使用ReadProcessMemory访问用于启动另一个进程的 CommandLine 的实践经验。< / p>


上次修改:

答案 1 :(得分:2)

当我们想要使用调试信息编译的另一个应用程序并在运行时从中获取东西时,我们正在处理的是“如何编写我自己的自定义调试器/分析器/自动测试内核”的问题

TestComplete和其他AutomatedQA程序包含一个Debugger和Profiler内核,它可以启动,运行和远程控制应用程序,并以多种格式解析其调试信息,包括附加到这些可执行文件的TurboDebugger TD32信息。他们的分析内核也可以在创建时看到每个对象,并且可以迭代类似RTTI的调试信息,以确定创建的对象是特定的类类型,然后查看该对象中存在哪些属性。

现在,TestComplete添加了AQTime级别的东西,内省Window句柄的能力,以及来自Window Handles的直觉,后面是Delphi类名称。但是,你(或我)编写一个可以告诉你鼠标位于属于TPanel的窗口句柄上的程序要比知道哪个版本的Delphi创建该特定可执行文件要容易得多TPanel的版本,然后,它将包含哪些属性,并从正在运行的程序中读取这些值,这需要您实现自己的“调试器引擎”。我不知道你甚至可以用来开始编写自己的调试器的任何开源应用程序,你当然不能在你自己的应用程序中使用AQTime / TestComplete中的那些,或Delphi内部的那些

我无法为您编写示例程序来执行此操作,但即使可以,也需要大量第三方库支持。要查看鼠标悬停的窗口句柄的窗口类,请查看如何实现类似MS Spy ++实用程序的内容。

An easy case is if your mouse is mousing over a window inside your own application。为此,请参阅about.com链接,该链接仅使用RTTI。