【问题标题】:Find all properties of an ActiveX component查找 ActiveX 组件的所有属性
【发布时间】:2013-01-02 21:23:28
【问题描述】:
我试着环顾四周,但无法说服自己给出答案,因为 COM/ActiveX 的世界似乎非常混乱。
基本上我想知道的是,给定 GUID,有没有办法知道 ActiveX 控件公开的所有接口、属性和方法?
我在某处读到,您只需要询问是否存在特定属性即可。但是在知道那里有什么之前,我该如何询问房产呢?
我猜 IDispatch 做了类似的事情,但我无法弄清楚如何使用它。如果这是一个可行的方法,那么一个小的 sn-p,最好是在 C# 中,可以帮助我更好地理解。
谢谢
【问题讨论】:
标签:
c#
properties
com
activex
idispatch
【解决方案1】:
您可以为此使用 PowerShell:
$a = new-object -comobject ProgId
#get properties
$a | Get-Member -membertype properties
#or get all members
$a | Get-Member
在 C# 中,您可以使用 Type.GetMembers Method。
【解决方案2】:
ActiveX 控件不必是自描述的,也不必能够枚举支持的接口和/或属性。与其他 COM 类一样,它们实现了某些接口并实现了一组强制接口,它们非常适合嵌入到主机应用程序中。也就是说,您最终可能无法找到某个有效 ActiveX 控件的属性。
不过,通常情况下,如果给定的控件可以完成大多数控件的工作,您就可以成功完成此任务。 Control 的 COM 类通常有一个类型库,您可以通过查看注册表引用或IProvideClassInfo 接口来发现。从那里开始,当您持有ITypeInfo 接口时,您可以找到该类的IDispatch 派生接口,然后使用保存此信息的类型库枚举属性和方法。