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

Ren*_*ann 2 delphi excel ole ms-word

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

TOleContainer使用类,容器可以包含不同的OLE应用程序(例如MS Word,MS Excel,...),具体取决于在其中编辑的文件.

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


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

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

如何访问OleObject _Application

Ond*_*lle 6

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;
Run Code Online (Sandbox Code Playgroud)

用法示例:

  ShowMessage(GetOleObjectAppName(OleContainer1.OleObjectInterface));
Run Code Online (Sandbox Code Playgroud)

  • 也许你可以从[`IOleObject.GetUserClassID`](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682313(v = vs.85).aspx)开始,然后查找应用程序[注册表]中的名称(http://www.codeproject.com/Articles/1265/COM-IDs-Registry-keys-in-a-nutshell),(可能通过`AppID`). (2认同)