从Win32应用程序访问PowerPoint UWP本地应用程序数据虚拟化文件夹位置

时间:2018-04-09 09:57:13

标签: delphi uwp com powerpoint desktop-bridge

我有一个使用COM访问PowerPoint的应用程序,以便从PowerPoint文件导出缩略图。导出后,将显示缩略图。我正在将缩略图导出到我的应用程序的本地appdata文件夹,以便缓存导出的缩略图。这是一个简化的例子:

uses
  MSPPT2000, Office2000, PngImage;

var
  FPP: TPowerPointApplication;
  FPres:  TPowerPointPresentation;
  FileName, ExportFolder: string;
begin
  FileName := Edit1.Text;

  FPP := TPowerPointApplication.Create(nil);
  FPP.Connect;
  FPres := TPowerPointPresentation.Create(nil);
  FPres.ConnectTo(FPP.Presentations.Open(FileName, msoTrue, msoTrue, msoFalse));

  ExportFolder := GetFolder_LocalAppData + 'PowerPointExportTest';      // 'C:\Users\Testuser\AppData\Local\PowerPointExportTest'
  ForceDirectories(ExportFolder);

  FPres.Slides.Item(1).Export(ExportFolder + '\Page1.png', 'PNG', 200, 100);

  FPres.Free;
  FPP.Free;

  Image1.Picture.LoadFromFile(ExportFolder + '\Page1.png');
end;

此代码已运行多年,但现在用户已从Microsoft Store安装了PowerPoint 365。 Image1.Picture.LoadFromFile调用失败并显示EFOpenError,因为缩略图不存在。

并不是拇指不存在,而是写入不同于我要求的文件夹: C:\Users\Testuser\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Local\PowerPointExportTest\Page1.png

现在看起来PowerPoint已成为UWP应用程序,并且使用桌面桥来虚拟化文件夹。

我现在可以对此路径进行硬编码,但这感觉不对。使用Win32应用程序访问导出的thumb文件的官方方法是什么?

  try
    Image1.Picture.LoadFromFile(ExportFolder + '\Page1.png');
  except
    on E: EFOpenError do
    begin
      ShowMessage('File not found in the expected place, trying hard coded alternative path');
      Image1.Picture.LoadFromFile(GetFolder_LocalAppData + 'Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Local\PowerPointExportTest\Page1.png');
    end;
  end;

0 个答案:

没有答案