Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 识别/列出来自第三方软件的COM对象和属性_Delphi_Com_Automation - Fatal编程技术网

Delphi 识别/列出来自第三方软件的COM对象和属性

Delphi 识别/列出来自第三方软件的COM对象和属性,delphi,com,automation,Delphi,Com,Automation,我正在尝试设计一个应用程序,它可以识别任何不同应用程序上的COM对象及其属性。这是我第一次尝试这样做,我甚至不知道从哪里开始。理想情况下,它将使用Delphi XE2制作,但我愿意接受建议 如果我有CLSID,是否有任何方法可以“扫描”正在运行的应用程序以查找基于它的对象?或者,换一种方式,是否有更好的方法在任何正在运行的应用程序中列出/查找活动对象 非常感谢您提供的任何帮助,以及关于该主题的良好文档的任何指导 编辑:问题实际上是在任何其他应用程序中查找COM对象,列出属性以及我需要的其他内容,

我正在尝试设计一个应用程序,它可以识别任何不同应用程序上的COM对象及其属性。这是我第一次尝试这样做,我甚至不知道从哪里开始。理想情况下,它将使用Delphi XE2制作,但我愿意接受建议

如果我有CLSID,是否有任何方法可以“扫描”正在运行的应用程序以查找基于它的对象?或者,换一种方式,是否有更好的方法在任何正在运行的应用程序中列出/查找活动对象

非常感谢您提供的任何帮助,以及关于该主题的良好文档的任何指导


编辑:问题实际上是在任何其他应用程序中查找COM对象,列出属性以及我需要的其他内容,这些问题已经在其他问题中得到了回答。

无法扫描正在运行的COM对象。一旦它们被实例化,它们就是被其他东西(成员接口指针变量等)引用的内存片段


有时对象被放在运行对象表(
ROT
)上,您可以从中检索它们,正如注释中所建议的那样。比方说,这个属性将代码注入到另一个应用程序中,该应用程序将为系统中所有已知的应用程序对象调用GetActiveObject。对不起,我想不出其他任何东西了。你试过这个函数吗?我在ROT方面的成功有限,因为显然应用程序必须显式注册对象,但情况并非总是如此。@M.P.R.-你愿意详细说明一下你有限的成功吗。好吧,即使所有服务器都需要在ROT中注册,ROT中的对象甚至不必被客户机绑定。如果它是绑定的,它也不会提供有关客户端的任何信息。@Sertac Akyuz,我应该说清楚,我的ROT上显示了一些应用程序,但在注意到许多应用程序丢失并发现它们必须在那里明确注册之后,我想查查这些烂东西是不行的。也许我用了错误的方法,把事情搞得太复杂了?我必须能够阅读一些标签和编辑在VB6开发的应用程序,但我没有访问源代码。要做到这一点,您会说我仍然必须钩住实例化吗?@Roman,是否可以从ROT获取关于哪个(客户端)进程调用了一个条目(如果有的话)的信息?如果不是的话,您的第二段与问题无关,因为问题是如何知道某个特定进程实例化了哪些对象。@MPR,我的观点是,扫描内存中的实例肯定是错误的。假设您对实例、实例所在的堆等都有一些签名,那么这个过程看起来仍然非常痛苦。但是你似乎对你的对象了解得更多——它们是ActiveX控件吗?如果它们是,特别是有窗口的,那么您可以找到控件的窗口,如果它们是基于ATL的,这很可能,您可以使用ATL消息从
HWND
s获取接口,如果这个钩子起作用了,那么您最好继续通过已知的接口枚举属性。@Sertac,有时,客户机会将指示进程标识符的条目放在ROT上。ROT实际上与这个问题毫无关系,但我不得不提到这一点,因为其他评论认为它可能会有所帮助。@Roman,我对我希望在一个应用程序中使用的对象略知一二,但目标是将其扩展到任何应用程序中。我不确定它们是否是ActiveX控件,如果它们不是,我能做些什么吗?另外,我对堆栈溢出有点陌生,我是否应该发布另一个问题,询问在其他应用程序中,无论对象类型如何,“读取”信息的最佳方式是什么?