2011-06-05 61 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