У меня есть следующая процедура, которая должна вызывать Edge из программы 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», а другую с «Имя .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?
Я нашел несколько предложений, что делать, и я пробовал:
Конечно
И вы должны передать URL-адрес в качестве третьего аргумента, чтобы открыть его в браузере по умолчанию.
Обратите внимание, что в командной строке start msedge https://www.microsoft.com
работает.
Попробуйте добавить префикс file:/// в параметр пути к файлу и двойные кавычки.
"file:///E:\Temp\File Name.html"
Еще одна пара двойных кавычек вместо двойных кавычек, которые он уже использует?
@AmigoJack, ему не хватает префикса «file:///», я не имею в виду, что нужно добавить еще пару двойных кавычек.
Вы должны использовать %20
и удалить двойные кавычки.
Добавление префикса «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;
Возьмите тур, так как он действительно сразу объясняет большинство вопросов. Вы можете голосовать за комментарии, щелкнув треугольник (или стрелку вверх) слева от него.
Да, но я пропустил стрелку рядом с комментарием. Можно ли отметить мой собственный ответ как правильный?
Да, это правильно. Пожалуйста, напишите только решение в качестве ответа. Нам не нужно хранить всю остальную информацию, которая поможет вам найти решение.
@ivo.tisljar. Да, вы можете отметить свой ответ через 48 часов. Для получения дополнительной информации, пожалуйста, обратитесь к Могу ли я ответить на свой вопрос?
он показывает адрес как «E:\Temp\File%20Name.html». Настоящий URL-адрес —
file:///E:\Temp\File%20Name.html
.