如何在.Net中获取com对象控件的名称?

时间:2015-02-27 05:16:48

标签: .net com

我正在访问.net应用程序中的COM对象。 我想获得在设计时提供的这个COM对象的名称。

我用google搜索并了解获取名称的方法是通过GetTypeInfo api。但我不确定如何使用它。

任何人都可以提出解决方案吗?

2 个答案:

答案 0 :(得分:1)

最后,我可以做到这一点。以下是我从COM对象获取在设计时指定控制名称的步骤:

'Name'属性不能直接在IDispatch接口上使用

  • 在COM对象上使用IDispatch接口,我们可以调用标准属性和方法。使用它,我们能够检索HWND,Font等属性,但我们无法检索Name属性。

了解扩展器属性

  • 控件的某些属性由容器而不是控件提供;这些是扩展属性。扩展器属性的示例有:Name,Tag和Left。控件仍然需要知道这些扩展器属性的值是什么,有时需要能够更改扩展器属性; Extender对象为控件提供对这些属性的访问。

现在,下一个挑战是从可用的COM对象中获取扩展器对象。

  • COM对象上实现了一些标准的OLE接口。因此,使用这些接口,我们可以检索扩展器对象。有关COM对象上可用接口的详细信息,请参见以下链接。
  • 检索扩展对象不是直接步骤。为实现这一目标,

    首先,我们需要在控件上获取指向IOleObject接口的指针。这可以使用QueryInterface API检索。

    使用IOleObject指针,我们必须掌握与控件关联的ClientSite。这可以使用IOleObject接口上提供的GetClientSite API来实现。这将返回一个指向IOleClientSite接口的指针。

    从IOleClientSite接口指针,我们必须检索ControlSite。这是通过查询IOleControlSite接口来实现的。这将返回一个指向IOleControlSite接口的指针。

    可以使用IOleControlSite接口使用可用的GetExtendedControl API检索Extender对象。

    要访问扩展程序控制对象上的Name属性,我们必须获取指向IDispatch接口的指针并查询它。

答案 1 :(得分:0)

GetTypeInfo是IDispatch接口中的一个函数,因此您的COM对象必须支持IDispatch。 首先,您应该调用GetTypeInfoCount以查看组件是否提供类型信息。如果它返回0,那么它不会。

如果是,只需调用comObject.GetTypeInfo(0,0,指针)。第一个参数标识出你在问什么,0表示“关于组件”。 sescond参数是localeID,您可以从Kernel32.dll获取它,但使用0是US english的默认值。 thid是一个out参数,函数会将指针指向您正在寻找的ITypeInfo。

获得ITypeInfo之后,要获取名称,您仍然需要获取其文档(GetDocumentation),最后,文档具有名称(以及帮助文件和帮助上下文)。

所有这些都记录在MSDN中,搜索我在这里提到的功能以获取详细信息