delphi program的Edge中的本地文件

问题描述 投票:0回答:3

我有以下过程,应从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?

我找到了几个建议,我尝试了:

单引号中的输入文件名 - 与双引号相同的结果

在%面前输入不同的逃生字符:% /% ^%%%&%

在引号中输入%:“%”
  • 课程
  • adding“ 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 windows-10 escaping microsoft-edge
3个回答
3
投票

try将文件添加:///前缀到您的文件路径参数,然后doublequotes

"file:///E:\Temp\File Name.html"
    

0
投票
恰恰0.20美分...

在Chrome开放。最可用的浏览器。我的意见 100%在sfilename out not上有空间。

procedure OpenFileBrowser(const sFileName: string);
var
  Arq:string;
begin
  Arq:='file:///"' + sFileName + '"';
  BrowseURL(Arq);
end;

0
投票



最新问题
© www.soinside.com 2019 - 2025. All rights reserved.