首页 > 解决方案 > 从 Delphi 程序在 Edge 中打开本地文件

问题描述

我有以下程序应该从 Delphi 程序调用 Edge 并打开在 sFileName 中给出的地址的本地文件

procedure OpenFileInEdge (
  const Handle:HWND;
  const sFileName: string); 

begin
  ShellExecute (Handle, 'open', Pchar('"shell:Appsfolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge"'),
                Pchar ('"' + sFileName + '"'), nil, sw_ShowNormal);
end;

它工作正常,除非文件名本身或任何父映射的名称中有空格。当有空格时,例如“E:\Temp\File Name.html” Edge 将打开两个选项卡,而不是一个具有指定文件名的选项卡,一个名为“E:\Temp\File”,另一个名为“Name .html”。

当我将文件从 Win Explorer 拖到 Edge 时,地址显示为“E:\Temp\File%20Name.html”。因此,我已将上述过程中的调用更改为:

                Pchar (StringReplace (sFileName, ' ', '%20', [rfReplaceAll])), nil, sw_ShowNormal);

现在 Edge 打开一个带有以下地址的选项卡:“E:\Temp\File%2520Name.html”

我检查了替换后的文件名确实是“E:\Temp\File%20Name.html”,所以从Delphi到Edge的某个地方它被更改为“E:\Temp\File%2520Name.html”。

好的,25 是 % 的十六进制代码,那么我怎样才能告诉 Windows 不要将 % 转换为 %25 呢?

我找到了一些建议,我已经尝试过:

当然

标签: delphiwindows-10escapingmicrosoft-edge

解决方案


添加“file:\”前缀并没有改变不需要的行为,也没有从空白更改为 %20,我也不想在默认浏览器中打开文档,但特别是在 Edge 中(默认为 Chrome)。

有帮助的不是添加另一对双引号,而是另外两对双引号。现在的工作流程是这样的:

procedure OpenFileInEdge (
  const Handle:HWND;
  const sFileName: string);

begin
  ShellExecute (Handle, 'open', Pchar('"shell:Appsfolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge"'),
                Pchar ('"""' + sFileName + '"""'), nil, sw_ShowNormal);
end;

推荐阅读