Inno setup 跳转到CHM帮助文件中的主题而不打开另一个窗口

Inno setup 跳转到CHM帮助文件中的主题而不打开另一个窗口,inno-setup,chm,shellexecute,html-help,Inno Setup,Chm,Shellexecute,Html Help,我在安装程序中包含了一个简化的CHM帮助,我希望安装程序向导的每个页面上的帮助按钮都能调用不同的帮助页面。如果我通过执行命令hh.exe-mapid 1234 MyAppCutDownHelp.chm从一个安装程序向导页面打开“帮助”窗口,它可以正常工作,但是如果我稍后从另一个向导页面使用hh.exe-mapid 5678 MyAppCutDownHelp.chm执行相同的操作,我会确定该主题,但是HH.EXE的另一个实例启动了,然后我有两个帮助窗口,一个主题为1234,另一个主题为5678 我

我在安装程序中包含了一个简化的CHM帮助,我希望安装程序向导的每个页面上的帮助按钮都能调用不同的帮助页面。如果我通过执行命令
hh.exe-mapid 1234 MyAppCutDownHelp.chm
从一个安装程序向导页面打开“帮助”窗口,它可以正常工作,但是如果我稍后从另一个向导页面使用
hh.exe-mapid 5678 MyAppCutDownHelp.chm
执行相同的操作,我会确定该主题,但是HH.EXE的另一个实例启动了,然后我有两个帮助窗口,一个主题为1234,另一个主题为5678

我希望第一次调用HH.exe打开CHM帮助窗口,然后在安装程序的sane帮助窗口中显示后续帮助主题

我不相信我可以从Inno安装脚本Pascal访问与我通常从Delphi访问相同的HTML帮助API

我目前正在用启动帮助引擎

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;

您可以在
hhctrl.ocx

这在中有记录


这比IMHO简单得多:

Filename: "{win}\hh.exe"; \
    Parameters: "{app}\MeetSchedAssist.chm::/msa-revision-history.htm"; \
    WorkingDir: "{app}"; \
    Flags: nowait postinstall runmaximized; \
    Description: "{cm:ViewChangeHistory}"

不需要所有这些代码。只需使用
hh.exe

Great@Robert调用CHM文件即可。正是我想要的。@Robert Aarrggh没那么快。。。我在hhctrl.ocx中遇到错误0xc000005-尝试..除了没有拾取它之外-它直接进入MS“xxx遇到错误”对话框。您如何调用该函数?在我发布的示例中,它是有效的,我以前从来没有这样做过,只是根据文档编写了一个示例,所以我可能在这里也有一些东西需要学习。@rossmcm,你应该将你的代码添加到你的问题中,而不是添加到@Robert的答案中。@sarnold-发现得很好-我错误地使用了你的代码,我什么都没有得到。”找不到Myprog.chm“”。不过,我没有收到任何错误。
Filename: "{win}\hh.exe"; \
    Parameters: "{app}\MeetSchedAssist.chm::/msa-revision-history.htm"; \
    WorkingDir: "{app}"; \
    Flags: nowait postinstall runmaximized; \
    Description: "{cm:ViewChangeHistory}"