如何查询嵌入式 OLE 应用程序的显示名称

How to query display name of an embedded OLE application

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

使用

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

我要返回的是 Microsoft Word 2007(或 2010 或 2013 或...)或至少 Microsoft Word , 因为它显示在普通 Word 实例的标题栏中。


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

不幸的是,正如我在他的回答下方的评论中所述,它没有显示真正的应用程序标题。我找到了这个 question on SO。那里说,我可以使用 _Application.Caption 属性 访问主机应用程序的标题。我没有 _Application 的实例,但有 IOleObject。类型转换 (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));