繁体   English   中英

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

[英]How to get the property list and values of a control within a third-party Delphi application?

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

我知道这是可能的。 例如,TestComplete具有ObjectSpy窗口,该窗口可以提供有关控件的许多有用信息,包括RTTI信息。 如何才能做到这一点 ?

在此输入图像描述

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

为了更进一步,我建议你在SO上找到这些相关资源


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


最后编辑:

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

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

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

我不能给你写一个示例程序来做这件事,但即使我可以,也需要很多第三方库支持。 要查看鼠标悬停的窗口句柄的窗口类,请查看如何实现类似MS Spy ++实用程序的操作。

一个简单的例子是,如果您的鼠标鼠标悬停在您自己的应用程序内的窗口上 为此,请参阅about.com链接,该链接仅使用RTTI。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM