2011-06-05 60 views
0

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

我想第一次调用HH.exe打开CHM帮助窗口,然后从后面的帮助主题中显示从安装程序的理智帮助窗口。

我不相信我可以从Inno Setup脚本Pascal访问同样的HTML帮助API,我通常会从Delphi获得。

我目前正与

ShellExecAsOriginalUser ('open', ExpandConstant ('{tmp}\MyAppCutDownHelp.chm'), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode) ; 

启动帮助引擎,但我想,只是调用HH.EXE。

更新这是我基于@罗伯特的回答最新尝试:

; -- 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 '[email protected] 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; 
+0

使用你的代码我什么也没得到。 'Myprog.chm'找不到。虽然我没有收到错误。 – 2011-06-07 04:08:45

回答

2

可以使用HtmlHelpAHtmlHelpW功能hhctrl.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 '[email protected] 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; 
+0

很棒@Robert。正是我想要的。 – rossmcm 2011-06-06 20:56:26

+0

@Robert aarrgghh不那么快...我在hhctrl.ocx中得到错误0xc0000005 - try..except甚至没有拿起它 - 它直接到MS“xxx遇到错误”对话框。 – rossmcm 2011-06-06 23:26:52

+0

你是怎么调用这个函数的?在这个例子中,我发布了它的工作原理,之前我从来没有这样做过,只是写了一个基于文档的例子,所以我可能在这里学到一些东西。 – 2011-06-07 00:25:10