パラメータ
idHook
インストール対象のフックタイプを指定する。次の値のいずれかを指定する。
値
|
説明
|
WH_CALLWNDPROC |
システムが目的のウィンドウプロシージャへ送信したメッセージを監視する 1
個のフックプロシージャをインストールする。 |
WH_CALLWNDPROCRET |
目的のウィンドウプロシージャが処理したばかりのメッセージを監視する 1
個のフックプロシージャをインストールする。 |
WH_CBT |
コンピュータを利用したトレーニング(CBT)アプリケーションに有用な通知を受け取る 1 個のフックプロシージャをインストールする。 |
WH_DEBUG |
ほかのフックプロシージャのデバッグに有用な 1
個のフックプロシージャをインストールする。 |
WH_FOREGROUNDIDLE |
アプリケーションのフォアグラウンドスレッドがアイドル状態になろうとしているときに呼び出される、1
個のフックプロシージャをインストールする。アイドル時に優先順位の低いタスクを実行する場合、このフックは役に立つ。 |
WH_GETMESSAGE |
メッセージキューへポストされたメッセージを監視する 1
個のフックプロシージャをインストールする。 |
WH_JOURNALPLAYBACK |
WH_JOURNALRECORD
フックプロシージャが既に記録したメッセージをポストする 1 個のフックプロシージャをインストールする。 |
WH_JOURNALRECORD |
システムメッセージキューへポストされた入力メッセージを記録する 1
個のフックプロシージャをインストールする。マクロを記録する際に、このフックは役立つ。 |
WH_KEYBOARD_LL |
Windows NT/2000:低水準のキーボード入力イベントを監視する 1
個のフックプロシージャをインストールする。 |
WH_MOUSE |
マウスメッセージを監視する 1 個のフックプロシージャをインストールする。 |
WH_MOUSE_LL |
Windows NT/2000:低水準のマウス入力イベントを監視する 1
個のフックプロシージャをインストールする。 |
WH_MSGFILTER |
ダイアログボックス、メッセージボックス、メニュー、スクロールバーのいずれかへの入力イベントの結果として生成されたメッセージを監視する 1
個のフックプロシージャをインストールする。 |
WH_SHELL |
シェルアプリケーションにとって有用な通知を受け取る 1
個のフックプロシージャをインストールする。 |
WH_SYSMSGFILTER |
ダイアログボックス、メッセージボックス、メニュー、スクロールバーのいずれかへの入力イベントの結果として生成されたメッセージを監視する 1
個のフックプロシージャをインストールする。このフックプロシージャは、呼び出し側スレッドと同じデスクトップ内のすべてのアプリケーションを対象とするこれらのメッセージを監視する。 |
lpfn
フックプロシージャへのポインタを指定する。dwThreadID パラメータで
0、またはほかのプロセスが作成したスレッドの識別子を指定した場
合、lpfn パラメータで、ダイナミックリンクライブラリ(DLL)内に存在するフックプロシージャへのポインタを指定しなければならない。それ以外
の場合、現在のプロセスに関連付けられているコード内に存在するフックプロシージャへのポインタを指定できる。
hMod
lpfn パラメータが指すフックプロシージャを保持している DLL のハンドルを指定する。dwThreadId
パラメータが、現在のプロセスが作成した
スレッドを指定していて、フックプロシージャが現在のプロセスに関連付けられているコード内に存在する場合、hMod パラメータで NULL を
指定しなければならない。
dwThreadId
フックプロシージャを関連付けるべきスレッドの識別子を指定する。0
を指定すると、フックプロシージャは、呼び出し側スレッドと同じデスクトッ
プ内で動作している既存のすべてのスレッドに関連付けられる。
戻り値
関数が成功すると、フックプロシージャのハンドルが返る。
関数が失敗すると、NULL が返る。拡張エラー情報を取得するには、 関数を使う。
解説
hMod パラメータで NULL を指定し、dwThreadId パラメータで 0
またはほかのプロセスが作成したスレッドの識別子を指定すると、エラー
が発生することがある。
CallNextHookEx
関数を呼び出して次のフックプロシージャへのチェーンを確立するかどうかは自由であるが、この関数を呼び出すことを強く
推奨する。CallNextHookEx 関数を呼び出さないと、フックをインストールしたほかのアプリケーションがフックの通知を受け取れず、誤動作
する可能性がある。このような通知をほかのアプリケーションに絶対に知らせたくないと考える非常に強い理由がある場合を除き、通常は
CallNextHookEx 関数を呼び出すべきである。
アプリケーションを終了する前に、アプリケーションは UnhookWindowsHookEx
関数を呼び出して、フックに関連付けられたシステムリソー
スを解放しなければならない。
フックのスコープは、フックタイプによって異なる。いくつかのフックは、グローバルスコープでのみ設定できる。ほかのフックは、特定のスレッ
ドをスコープとすることもできる。次の表は、各フックに適用できるスコープを示す。
フック
|
スコープ
|
WH_CALLWNDPROC |
スレッドまたはグローバル |
WH_CALLWNDPROCRET |
スレッドまたはグローバル |
WH_CBT |
スレッドまたはグローバル |
WH_DEBUG |
スレッドまたはグローバル |
WH_FOREGROUNDIDLE |
スレッドまたはグローバル |
WH_GETMESSAGE |
スレッドまたはグローバル |
WH_JOURNALPLAYBACK |
グローバルのみ |
WH_JOURNALRECORD |
グローバルのみ |
WH_KEYBOARD |
スレッドまたはグローバル |
WH_KEYBOARD_LL |
グローバルのみ |
WH_MOUSE |
スレッドまたはグローバル |
WH_MOUSE_LL |
グローバルのみ |
WH_MSGFILTER |
スレッドまたはグローバル |
WH_SHELL |
スレッドまたはグローバル |
WH_SYSMSGFILTER |
グローバルのみ |
指定されたフックタイプがスレッドとグローバルの両方をサポートしている場合、最初にスレッドフックが呼び出され、次にグローバルフックが呼
び出される。
グローバルフックは共有リソースであり、そのようなフックをインストールすると、呼び出し側スレッドと同じデスクトップ内のすべてのアプリケー
ションに影響を与える。すべてのグローバルフック関数は、ダイナミックリンクライブラリ(DLL)内に存在していなければならない。グローバルフ
ックは、特別な目的のアプリケーションでのみ、またはアプリケーションのデバッグの際に開発を支援する目的でのみ使うべきである。ライブ
ラリでフックの必要がなくなった場合、そのフックに対応するフックプロシージャを削除するべきである。
|