跳转到CHM帮助文件中的主题,而无需打开另一个窗口

时间:2011-06-05 23:30:49

标签: inno-setup chm shellexecute html-help

我在安装程序中包含了一个简化的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;

2 个答案:

答案 0 :(得分:2)

您可以使用HtmlHelpA

中的HtmlHelpWhhctrl.ocx功能

MSDN中记录了这一点。

; -- Example1.iss --
; Demonstrates copying 3 files and creating an icon.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!

[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,'C:\Program Files (x86)\Inno Setup 5\ISetup.chm',HH_DISPLAY_TOC,0);
  result := true;
end;

答案 1 :(得分:1)

这更简单恕我直言:

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

不需要所有代码。只需使用hh.exe调用CHM文件。