WinHelp

最近HTMLヘルプがよく使われるようになってきましたが、Vistaでは別途インストールしないといけませんが、まだまだWindowsヘルプも現役です。たぶん。

では早速Windowsヘルプを使うためのAPI WinHelp関数(そのまんまですね)の使い方を見ていきましょう。
(とっとと使いたい人のために)

APIの定義は次のようになっています。

BOOL WinHelp(
    HWND hWndMain,
    LPCTSTR lpszHelp,
    UINT uCommand,
    DWORD dwData
);

パラメータは次のようになっています。

名前説明
hWndMainヘルプを呼び出したウィンドウのハンドル
lpszHelpヘルプファイル名
uCommandヘルプコマンド(後に説明)
dwDatauCommandの内容により変化(普通は0)

uCommandおよびdwDataには次のような値を設定します。

uCommand説明およびdwDataに設定する値
HELP_COMMANDヘルプマクロを実行します。
dwDataにはヘルプマクロ名を設定します。
HELP_CONTENTSヘルプに設定された目次を表示します。
dwDataには0を設定します。
HELP_CONTEXT特定のトピックを表示します。
dwDataには表示したいトピックのコンテキストIDを設定します。
HELP_CONTEXTMENUポップアップヘルプを表示するためのメニューを表示します。
dwDataには表示したいトピックのコンテキストIDを設定します。
HELP_CONTEXTPOPUPポップアップヘルプを表示します。
dwDataには表示したいトピックのコンテキストIDを設定します。
HELP_FINDER「トピックの検索」を表示します。
dwDataには0を設定します。
HELP_FORCEFILEヘルプファイルが見つからなければ探して表示します。
dwDataには0を設定します。
HELP_HELPONHELP「ヘルプの使い方」を表示します。
dwDataには0を設定します。
HELP_INDEXヘルプに設定された目次を表示します。
dwDataには0を設定します。
HELP_KEYキーワードに一致するトピックを表示します。
dwDataにはキーワード名を設定します。
HELP_MULTIKEYキーワードテーブルに一致するトピックを表示します。
dwDataにはMULTIKEYHELP構造体のアドレスを設定します。
HELP_PARTIALKEYキーワードに正確に一致するトピックを表示します。
dwDataにはキーワード名を設定します。
HELP_QUITヘルプを終了します。
dwDataには0を設定します。
HELP_SETCONTENTS目次として表示するトピックを設定します。
dwDataには目次のコンテキストIDを設定します。
HELP_SETPOPUP_POSポップアップヘルプを表示する位置を設定します。
dwDataにはPOINT構造体のアドレスを設定します。
HELP_SETWINPOSヘルプを表示する位置を設定します。
dwDataにはHELPWININFO構造体のアドレスを設定します。

03/08/31追加分

さて、わかりましたでしょうか。
多分よくわからなかったと思います。自分でも書いててよくわかってませんでした。
「とにかくヘルプを表示するにはどうすればいいんだ!」という声が聞こえてきそうですね。

というわけで、とりあえずサンプルプログラムに合わせて、VBでのコードを書いてみます。
まず、宣言はこうです。

' WinHelp API の宣言
Public Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hWnd As Long, _
        ByVal HelpFile As String, ByVal wCommand As Integer, dwData As Any) As Integer

' WinHelp API の nCommand に設定する定数
Public Const HELP_CONTEXT = &H1         ' 特定のトピックを表示.
Public Const HELP_QUIT = &H2            ' ヘルプの終了.
Public Const HELP_INDEX = &H3           ' 目次の表示.
Public Const HELP_CONTENTS = &H3        ' 目次の表示.
Public Const HELP_HELPONHELP = &H4      ' ヘルプの使い方.
Public Const HELP_CONTEXTPOPUP = &H8    ' ポップアップヘルプの表示.
Public Const HELP_KEY = &H101           ' キーワードに一致するトピックを表示.
Public Const HELP_PARTIALKEY = &H105    ' キーワードに正確に一致するトピックを表示.
Public Const HELP_CONTEXTMENU = &HA     ' ポップアップメニューでヘルプを表示する.
Public Const HELP_FINDER = &HB          ' トピックの検索

一部省略してありますが、これだけあれば充分でしょう。

さて、次は目次を表示するサンプルです。

Ret = WinHelp(hWnd, MyHelp, HELP_INDEX, ByVal 0&)

実行したらわかると思いますが、表示されるのは、いわゆる「目次」ではありません。
仕方ないじゃないですか、昔はトップページ=目次だったんですから!

では普段よく見る「目次」を表示するにはどうすればいいかというと、

Ret = WinHelp(hWnd, MyHelp, HELP_FINDER, ByVal 0&)

これは元々「キーワードで検索」を出すための命令だった・・・・と思います。

プログラムが終了してもヘルプがそのまんまというのは少々不恰好です。
終了時には次のようにしてヘルプを終了させましょう。

Ret = WinHelp(hWnd, MyHelp, HELP_QUIT, ByVal 0&)

"ByVal 0&"については深く考えないでください。
以上!
もっと知りたい方はサンプルにて。

VB用サンプル(7.17kilobyte)