我有以下过程,应从delphi程序中调用边缘和打开本地文件,在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”。
ok,25个十六进制代码是%的,那么我怎么能告诉Windows不要将%转换为%25?
我找到了几个建议,我尝试了:单引号中的输入文件名 - 与双引号相同的结果
在%面前输入不同的逃生字符:% /% ^%%%&%
在引号中输入%:“%”
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;
try将文件添加:///前缀到您的文件路径参数,然后doublequotes
"file:///E:\Temp\File Name.html"
在Chrome开放。最可用的浏览器。我的意见 100%在sfilename out not上有空间。
procedure OpenFileBrowser(const sFileName: string);
var
Arq:string;
begin
Arq:='file:///"' + sFileName + '"';
BrowseURL(Arq);
end;