我在安装程序中包含一个精简的 CHM 帮助,我希望安装程序向导的每个页面上的帮助按钮都能调用不同的帮助页面。如果我通过执行命令从一个安装程序向导页面打开帮助窗口,hh.exe -mapid 1234 MyAppCutDownHelp.chm
它可以正常工作,但是如果我稍后从另一个向导页面执行相同的操作,hh.exe -mapid 5678 MyAppCutDownHelp.chm
我可以得到该主题,但是 HH.EXE 的另一个实例已启动,然后我有两个帮助窗口,一个带有主题 1234,一个带有主题 5678。
我希望第一次调用 HH.exe 以打开 CHM 帮助窗口,然后从安装程序的健全帮助窗口中显示后续帮助主题。
我不相信我可以从 Inno Setup 脚本 Pascal 访问相同的 HTML 帮助 API,而我通常会从 Delphi 获得。
我目前正在启动帮助引擎
ShellExecAsOriginalUser ('open', ExpandConstant ('{tmp}\MyAppCutDownHelp.chm'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode) ;
但我想这只是调用 HH.exe。
更新这是我基于@Robert 的回答的最新尝试:
; -- Help Test.iss --
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma2
SolidCompression=yes
OutputDir=userdocs:Inno Setup Examples Output
[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
[Code]
const
HH_DISPLAY_TOPIC = 0;
HH_DISPLAY_TOC =1;
HH_DISPLAY_INDEX =2;
HH_HELP_CONTEXT = 15;
function HtmlHelpA (hWndCaller: HWND; pszFile: PAnsiChar; uCommand: UINT; dwData: DWORD): HWnd;
external 'HtmlHelpA@hhctrl.ocx stdcall';
function HtmlHelp(hWndCaller: HWND; pszFile: String; uCommand: UINT; dwData: DWORD): HWnd;
begin
try
result := HtmlHelpA(hWndCaller,pszFile,uCommand,dwData);
except
MsgBox('Unable To Display Help file.', mbError, MB_OK);
end;
end;
function InitializeSetup : Boolean;
begin
HtmlHelp(0,'MyProg.chm',HH_DISPLAY_TOC,0);
result := true;
end;