从 Delphi 程序在 Edge 中打开本地文件
Open local file in Edge from Delphi program
我有以下程序应该从 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;
它工作正常,除非在文件名本身或任何父地图的名称中某处有一个 space。当存在 space 时,例如“E:\Temp\File Name.html”Edge 将打开两个选项卡,而不是一个具有指定文件名的选项卡,一个名为“E:[=37” =]”,另一个带有“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?
我找到了一些建议,我已经尝试过:
- 将文件名放在单引号中 - 结果与双引号相同
- 在%前面加上不同的转义字符: % /% ^% %% &%
- 将 % 放在引号中:"%"
当然
尝试在文件路径参数中添加 file:/// 前缀和双引号
"file:///E:\Temp\File Name.html"
添加“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 程序调用 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;
它工作正常,除非在文件名本身或任何父地图的名称中某处有一个 space。当存在 space 时,例如“E:\Temp\File Name.html”Edge 将打开两个选项卡,而不是一个具有指定文件名的选项卡,一个名为“E:[=37” =]”,另一个带有“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?
我找到了一些建议,我已经尝试过:
- 将文件名放在单引号中 - 结果与双引号相同
- 在%前面加上不同的转义字符: % /% ^% %% &%
- 将 % 放在引号中:"%"
当然
尝试在文件路径参数中添加 file:/// 前缀和双引号
"file:///E:\Temp\File Name.html"
添加“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;