使用ShellExecute,如何在默认浏览器中显示链接的HTML文件

时间:2019-06-12 11:07:48

标签: delphi shellexecute

我想出了URL中参数的用法:

  

对于主题,在“帮助和手册”中,选择底部的选项卡“主题选项”,然后在“主题ID:”字段中输入主题名称。

我为“登录”章节选择的主题ID是“登录”,然后使用URL:

file:///D:/RiskModeller/Manual/HTML/index.html?login.htm

浏览器将在登录章节中打开手册。

然后我在Delphi中尝试了以下代码:

procedure TfrmHelp.FormActivate(Sender: TObject);
var
  Res: HINST;
  Buffer: array[0..MAX_PATH] of Char;
  SEInfo: TShellExecuteInfo;
  HtmlFile, Anchor: string;
begin
  HtmlFile := 'D:\RiskModeller\Manual\HTML\index.html';
  Anchor := '?login.htm';

  FillChar(Buffer, SizeOf(Buffer), 0);
  Res := FindExecutable(PChar(HtmlFile), nil, Buffer);
  if Res <= 32 then
    raise Exception.Create(SysErrorMessage(Res));

  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(SEInfo);
  with SEInfo do
  begin
    lpFile := PChar(string(Buffer));
//    lpParameters := PChar(Format('"%s"', [HtmlFile + Anchor]));  {Nols ... Also not working}
    lpParameters := PChar(HtmlFile + Anchor);

    nShow := SW_SHOWNORMAL;
    fMask := SEE_MASK_FLAG_NO_UI; // Do not display an error message box if an error occurs.
  end;
  if not ShellExecuteEx(@SEInfo) then
    RaiseLastOSError;
end;

但是此Delphi代码会生成以下URL:

file:///D:/RiskModeller/Manual/HTML/index.html%3Flogin.htm

应该是:

file:///D:/RiskModeller/Manual/HTML/index.html?login.htm

0 个答案:

没有答案