如何查询embedded的OLE应用程序的显示名称

我想查询embedded在我的Delphi XE4 Win32应用程序中的OLE应用程序的显示名称。

TOleContainer类,并且容器可以包含不同的OLE应用程序(例如MS WordMS Excel ,…),取决于在其中编辑的文件。

我想要返回的是Microsoft Word 2007 (或2010或2013或…)或至lessMicrosoft Word ,因为它显示在正常Word实例的标题栏中。


编辑: TOndrej的答案是非常有帮助的。 谢谢。

不幸的是,正如我在他的回答下的评论所描述的那样,它没有显示真正的应用标题。 我在SO上发现了这个问题 。 据说,我可以使用_Application.Caption属性访问主机应用程序的标题。 我没有_Application的实例,但IOleObject 。 Typecast( MyOleObjectInterface as _Application )失败。

OleObject如何作为_Application被访问?

请参阅IOleObject.GetUserType方法:

 function GetOleObjectAppName(const OleObject: IOleObject): string; var AppName: PWideChar; begin OleCheck(OleObject.GetUserType(USERCLASSTYPE_APPNAME, AppName)); try Result := AppName; finally CoTaskMemFree(AppName); end; end; 

用法示例:

  ShowMessage(GetOleObjectAppName(OleContainer1.OleObjectInterface));