delphi - 从 Delphi 程序在 Edge 中打开本地文件

标签 delphi windows-10 escaping microsoft-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 资源管理器拖到 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 呢?

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

  • 将文件名放在单引号中 - 结果与双引号相同
  • 在%前面放置不同的转义字符:%/% ^% %% &%
  • 将 % 放在引号中:“%”

当然

最佳答案

添加“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;

关于delphi - 从 Delphi 程序在 Edge 中打开本地文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65373073/

相关文章:

android - Delphi - 如何初始化字符串的 TArray?

delphi - 识别/列出来自第三方软件的 COM 对象和属性

Python int 太大而无法转换为 C long - 绘制 Pandas 日期

delphi - 对象 Pascal 与 Delphi?

Delphi - 编译后的EXE图标错误且无法更改

javascript - Windows UWP 应用程序中的 img 元素未调用 onerror 事件

c# - 升级到 Windows 10 后 WMI 不工作

PHP 在 Heredoc 中禁用转义

mysql - 使用 MySQL 触发器替换输入

javascript - AngularJS,管理二进制数据