Je pense pas qu'on puisse appeler directement l'exe avec des paramètres, en tout cas j'ai rien trouvé sur le net dans ce sens. J'ai quand même fini par trouver quelque chose.
Voici la solution (en tout cas une solution) :
1. Utiliser la fonction HtmlHelpA de l'ocx HHCTRL. Dans les exemples trouvés sur Internet la fonction est généralement liée en statique.
Code :
- function HtmlHelp(hwndCaller: HWND; pszFile: PChar; uCommand: UINT; dwData: DWORD): HWND; stdcall; external 'HHCTRL.OCX' name 'HtmlHelpA';
|
Mais il est également possible de lier dynamiquement la fonction.
2. Définir les variables d'appels aux commandes de HtmlHelp.
Code :
- HH_DISPLAY_TOPIC = $0000;
- HH_HELP_FINDER = $0000;
- HH_DISPLAY_TOC = $0001;
- HH_DISPLAY_INDEX = $0002;
- HH_DISPLAY_SEARCH = $0003;
- HH_SET_WIN_TYPE = $0004;
- HH_GET_WIN_TYPE = $0005;
- HH_GET_WIN_HANDLE = $0006;
- HH_ENUM_INFO_TYPE = $0007;
- HH_SET_INFO_TYPE = $0008;
- HH_SYNC = $0009;
- HH_KEYWORD_LOOKUP = $000D;
- HH_DISPLAY_TEXT_POPUP = $000E;
- HH_HELP_CONTEXT = $000F;
- HH_TP_HELP_CONTEXTMENU = $0010;
- HH_TP_HELP_WM_HELP = $0011;
- HH_CLOSE_ALL = $0012;
- HH_ALINK_LOOKUP = $0013;
- HH_GET_LAST_ERROR = $0014;
- HH_ENUM_CATEGORY = $0015;
- HH_ENUM_CATEGORY_IT = $0016;
- HH_RESET_IT_FILTER = $0017;
- HH_SET_INCLUSIVE_FILTER = $0018;
- HH_SET_EXCLUSIVE_FILTER = $0019;
- HH_INITIALIZE = $001C;
- HH_UNINITIALIZE = $001D;
- HH_PRETRANSLATEMESSAGE = $00FD;
- HH_SET_GLOBAL_PROPERTY = $00FC;
|
Toutes ces commandes sont disponibles mais HH_DISPLAY_TOC et HH_KEYWORD_LOOKUP suffisent.
3. Définir la structure qui va être passé en paramètre de l'appel HH_KEYWORD_LOOKUP
Code :
- tagHH_AKLINK = record
- cbStruct : Integer;
- fReserved : Boolean;
- pszKeywords : Cardinal;
- pszUrl : Cardinal;
- pszMsgText : Cardinal;
- pszMsgTitle : Cardinal;
- pszWindow : Cardinal;
- fIndexOnFail : Boolean;
- end;
- HH_AKLINK = tagHH_AKLINK;
- PHH_AKLINK = ^HH_AKLINK;
|
4. Remplir la structure HH_AKLINK
Code :
- iLink : PHH_AKLINK;
- ...
- new(iLink);
- iLink.cbStruct := SizeOf(HH_AKLINK);
- iLink.fReserved := False;
- iLink.pszKeywords := Cardinal(PChar(szParams));
- iLink.pszUrl := 0;
- iLink.pszMsgText := 0;
- iLink.pszMsgTitle := 0;
- iLink.pszWindow := Cardinal(PChar('main'));
- iLink.fIndexOnFail := True;
|
5. Ouvrir l'aide grâce à ces deux appels :
Code :
- HtmlHelp(0, PChar(szPath), HH_DISPLAY_TOC, 0);
- HtmlHelp(0, PChar(szPath), HH_KEYWORD_LOOKUP, Cardinal(iLink));
|
Avec szParams le mot recherché et szPath le chemin vers le fichier CHM.
HtmlHelp renvoie le handle de l'aide. Il est donc possible de tester si l'aide a pu être ouverte en regardant si le handle n'est pas nul.
Voilà vous savez tout, de l'aide est dispo aux adresses suivantes :
http://www.paranoia.clara.net/arti [...] _help.html
http://msdn.microsoft.com/library/ [...] lookup.asp
http://msdn.microsoft.com/library/ [...] aklink.asp (explique comment remplir la structure)
http://bdn.borland.com/article/0,1410,27842,00.html