Windowsのイベント処理をフックすることで、キーボードやマウスの入力を監視したり、無効にしたりできます。 フックする - SetWindowsHookEx関数を使用する。
- 関数定義は以下の通り。失敗時はNULL、成功するとフックハンドルを返す。
HHOOK SetWindowsHookEx(
int idHook, // フックタイプ
HOOKPROC lpfn, // フックプロシージャ
HINSTANCE hMod, // アプリケーションインスタンスのハンドル
DWORD dwThreadId // スレッドの識別子
);
- 例えばキーボードイベントを監視する場合は第一引数に定数WH_KEYBOARD、若しくは定数WH_KEYBOARD_LLを指定する。
- 行わせたい処理を記述した関数ポインタを第二引数に指定。
- アプリケーションのインスタンスハンドルを第三引数に指定。
- 通常アプリ内でのフックならNULL。
- DLL内にフックプロシージャを置く場合はDLLのインスタンスを指定。
- スレッドの識別子を第四引数を指定。
- 通常アプリ内でのフックならGetCurrentThreadId()を指定する。
- システムフックの場合はゼロを指定する。
ローカルフックとシステムフック- アプリ内に回ってくるイベントをフックする場合はローカルフックと言う。
- Windowsのイベントをフックすることをシステムフック、あるいはグローバルフックと言う。
- システムフックをする場合はDLL内にフックプロシージャを置く必要がある(DLLを使わないとSetWindowsHookEx関数で失敗する)。
フックプロシージャフックを解除する参考リンク |
|