# Microsoft WinHelp

Microsoft WinHelp est un format propriétaire pour les fichiers d'aide des programmes tournant sous Microsoft Windows, développé par Microsoft. Introduit sur le marché pour Windows 3.x, il est toujours utilisé sur Windows XP mais a été abandonné pour Windows Vista. Il est remplacé par Microsoft Compressed HTML.
Pour Windows 95, on parle indifféremment de Windows 95 Help ou de WinHelp 4.0.

## Fonctionnalités

Le format Microsoft WinHelp fournit :
* une aide en ligne : il s'agit d'un manuel consultable sur ordinateur (en général accessible par le menu Aide, parfois noté ?), avec une table des matières, des liens hypertextuels, et une recherche par mots-clefs ;
* une aide contextuelle : une infobulle (pop-up) apparaît lorsque l'on désigne une commande (champ de texte, bouton, case à cocher…) avec le clic du bouton secondaire, ou la touche [F1].
En revanche, les bulles d'aide qui apparaissent en laissant le curseur immobile sur un objet (tooltips) ne dépendent pas de l'aide Microsoft WinHelp mais sont directement dans le programme.
On peut aussi afficher l'aide en ligne en double-cliquant sur le fichier d'aide depuis l'explorateur Windows (fichier .HLP, voir ci-après).

## Fichiers d'aide

L'aide Microsoft WinHelp se compose de deux fichiers :
* un fichier ayant l'extension .HLP (pour help), qui contient les pages affichées (aide en ligne et aide contextuelle) ;
* un fichier ayant l'extension .CNT (pour content), et qui contient la table des matières de l'aide en ligne.
Si le fichier .CNT est absent, on peut toujours utiliser l'aide contextuelle ; on peut également afficher la première page de l'aide en ligne et naviguer à l'aide des liens hypertextuels ou des boutons « précédent » et « suivant », mais on n'a pas accès à la table des matières et certaines pages peuvent de ce fait ne pas être accessibles. Pour Windows 3.x, il n'y avait pas de fichier .CNT. La table des matières était une page avec les liens vers les différentes pages ; à partir de Windows 95, la table des matières est un onglet d'une fenêtre flottante qui apparaît lorsque l'on ouvre l'aide ou lorsque l'on clique sur le bouton Content de la fenêtre d'aide.
La première fois que l'on fait une recherche par mot-clef, le moteur d'aide génère un fichier .GID qui permet cette recherche (le fichier peut être effacé, il sera régénéré à la prochaine utilisation).
On peut éventuellement avoir un fichier .FTS (full-text search index file) et .FTG (full-text search group file).
Tous ces fichiers portent le même nom que le programme auquel ils se rapportent, seule leur extension change.

## Génération de l'aide Microsoft WinHelp

Le fichier .HLP est généré à partir d'un fichier RTF ayant un formatage particulier. Une fenêtre d'aide, une rubrique (topic), que ce soit de l'aide en ligne ou de l'aide contextuelle, est une page du fichier RTF :
* le titre est précédé de notes de bas de page,
** la note avec la référence « # » contient la référence unique de la rubrique (topic ID), qui est, dans le cas de l'aide contextuelle, la référence de l'objet ;
** la note avec la référence « K » contient les mots-clefs (keywords) pour la recherche ;
** la note avec la référence « $ » contient le titre de la rubrique ;
* le texte des liens hypertextuel est souligné deux fois (il apparaît non souligné dans l'aide finale, cette mise en forme sert juste lors de la compilation) ; la référence unique de la rubrique cible (cf. item précédent), en police invisible, est accolée à ce texte ;
* les images sont remplacées par une chaîne de type « {bmc nom_image.bmp} », le nom_image.bmp étant le nom du fichier image ;
* pour l'aide contextuelle, la référence de l'objet est placée dans un fichier texte appelé « partition » (map), portant en général l'extension .HM, faisant le lien entre la référence et l'identifiant binaire ; cet identifiant binaire peut être obtenu avec le programme spyxx.EXE de Visual Studio ; ce fichier de partition peut être généré automatiquement à partir du code source par le programme makehm.EXE (le programmeur donne un identifiant à l'objet dans le code source, commençant par ID…, et c'est ce même identifiant mais commençant par HID… qui sert de référence) ;
Le fichier .CNT est simplement un fichier texte. Chaque page est référencée sur une ligne du fichier. La ligne comprend :
* le niveau hiérarchique de la page (1 pour un titre principal, 2 pour une section, 3 pour une sous-section…) ;
* le titre de la page ;
* la référence unique de la page, séparé du nom par un signe égal ;
* le type de fenêtre dans lequel elle s'affiche : >main pour la fenêtre principale, >proc pour la fenêtre flottante (procédure).
Les mises en forme de base, comme l'alignement et la police (graisse et italique compris) sont rendus tels quels dans l'aide générée.

### Exemple de page de fichier RTF

    $^{#K$}$Titre de la rubrique
    Ceci est le texte de la rubrique d'aide, avec un lien hypertextuelrubrique2.
    $^#$rubrique1
    $^K$mot-clef
    $^$$Titre de la rubrique
Dans l'exemple ci-dessus, la référence en police invisible est soulignée en pointillés.
Il existe des outils évitant de créer le fichier RTF à la main, comme par exemple RoboHelp ou Doc-To-Help. L'insertion d'un lien ou d'une image se fait alors « avec la souris » (RoboHelp), ou bien le programme prend un fichier Microsoft Word et le transforme en fichier RTF et fichiers BMP (Doc-To-Help, notion de monosource, single sourcing). Ces outils se chargent également de générer le fichier .CNT. L'outil UDO permet également, à partir d'un document écrit avec sa propre syntaxe, de générer le fichier RTF nécessaire.
Le fichier RTF et les fichiers BMP sont ensuite compilés par le programme HCRTF.EXE pour créer le fichier .HLP. Il faut pour cela créer un fichier de projet, d'extension .HPJ (help project), qui recense les fichiers à intégrer (différents fichiers RTF, dossiers où sont mis les images, fichier donnant la correspondance entre les identifiants