如何在中获取com对象控件的名称网



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

我已经在谷歌上搜索并了解到获取名称的方法是通过GetTypeInfoapi。但我不知道如何使用它。

有人能为它提出解决方案吗?

最后,我可以完成这项工作了。以下是我在设计时从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。

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

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

如果是,只需调用comObject。GetTypeInfo(0,0,指针)。第一个参数确定您要问什么,0的意思是"关于组件"。sescond参数是localeID,您可以从Kernel32.dll获取它,但使用0是美式英语的默认值。thid是一个out参数,函数会在那里放置一个指向您要查找的ITypeInfo的指针。

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

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

最新更新