Prüfen, ob die HTML-Help installiert ist

By dose | October 23, 2005
Under: technical stuff, Uncategorized

In heutigen Applikationen möchte man die Online-Hilfe oft nicht im klassischen
WINHELP-Format realisieren, sondern als neue HTML-Help.
Wenn man sich die Microsoft-Dokumentation zur HTML Help anschaut, so ist diese aber eher etwas verwirrend, was den Aufruf aus der Applikation heraus betrifft.
Zwar hat sich MS bemüht, den Umstieg von Winhelp möglichst einfach zu gestalten, indem das HtmlHelp() – Kommando dem WinHelp() Kommando syntaktisch gleicht, das Ganze ist aber trotzdem nicht einfach zu implementieren, denn insbesondere das Errorhandling scheint etwas kompliziert zu sein:

Zuallererst benötigt man den HTMLhelp-Library und header files, welche im HTML-Help Workshop integriert sind, welcher hier erhältlich ist.
Als nächstes kopiert man die library und das header-file ins Lib- bzw. Include-Verzeichnis von Visual Studio.
Wer glaubt, damit wäre es getan, irrt leider. Zur korrekten Verwendung von HTML Help muss auch noch die Struktur HH_LAST_ERROR definiert werden, da diese scheinbar nicht in der htmlhelp.h definiert wurde.
Nun stellt sich das nächste Problem: Wie findet man überhaupt heraus, ob HTML-Help überhaupt installiert ist? Unter Win 95 bzw. NT 4.0 kann man standardmäßig nicht von einer installierten HTML-Help ausgehen, da diese Betriebssystemversionen standardmäßig noch keinen IE4 oder höher beinhalten, welcher als erstes HTML-Help einführt. Führt man seine Applikation auf einem dieser Zielsysteme aus, so kommt eine Fehlermeldung, die besagt, dass eine DLL nicht gefunden werden konnte.
Um den Benutzer nicht durch solch kryptische Meldungen zu verunsichern, sollte man also auf Vorhandensein der HTML-Help prüfen und, falls nicht vorhanden, den Benutzer darauf hinweisen, dass IE 4.0 oder höher zu installieren ist (Übrigens scheint das Ganze mit 100%iger Sicherheit nur bei einer Vollinstallation des IE mitinstalliert zu werden). Die Identifikation von HTML-Help funktioniert nur mittels des Prüfens auf Vorhandensein der CLSID {ADB880A6-D8FF-11CF-9377-00AA003B7A11}.
Sollte die HTML-Help nun zwar vorhanden sein, aber nicht gestartet werden können, so ist die entsprechende Fehlermeldung auszulesen und dem Benutzer auszugeben.
Auch dies ist leider kein allzu einfaches Unterfangen, da der Fehlerstring, anders als bei normalen C-Funktionen vom Typ BSTR ist. Um das Handling dieses Wide-character strings zu vereinfachen, verwenden wir, falls C++ zum Einsatz kommt, die Klasse _bstr_t, welche die Speicherverwaltung und Stringkonvertierung für die Ausgabe für uns übernimmt.

Ich habe hier die wichtigsten Funktionen zusammengefasst, die benötigt werden, um
die HTML-Help ordnungsgemäß verwenden zu können. Am Einfachsten ruft man sie beim Erhalt der WM_HELP-Nachricht in seiner Window-Dispatcher procedure auf, um sie beim Druck auf F1 anzeigen zu können.
Hier nun mein Code-snippet:

Leave a Comment

Name:

E-Mail :

Subscribe :
Website :

Comments :