‎イベントのフックWindowsのイベント処理をフックすることで、キーボードやマウスの入力を監視したり、無効にしたりできます。フックするSetWindowsHookEx関数を使用する。関数定義は以下の通り。失敗時はNULL、成功するとフックハンドルを返す。スレッドの識別子);例えばキーボードイベントを監視する場合は第一引数に定数WH_KEYBOARD、若しくは定数WH_KEYBOARD_LLを指定する。行わせたい処理を記述した関数ポインタを第二引数に指定。アプリケーションのインスタンスハンドルを第三引数に指定。通常アプリ内でのフックならNULL。DLL内にフックプロシージャを置く場合はDLLのインスタンスを指定。スレッドの識別子を第四引数を指定。通常アプリ内でのフックならGetCurrentThreadId()を指定する。システムフックの場合はゼロを指定する。ローカルフックとシステムフックアプリ内に回ってくるイベントをフックする場合はローカルフックと言う。Windowsのイベントをフックすることをシステムフック、あるいはグローバルフックと言う。システムフックをする場合はDLL内にフックプロシージャを置く必要がある(DLLを使わないとSetWindowsHookEx関数で失敗する)。フックプロシージャフックプロシージャは次のような戻り値、引数で作成する。lParam)フックしたプロシージャでは処理後、特別な理由がない限り本来の処理へ引き継がなければならない。しないとイベントは握りつぶされることになる。本来の処理へ引き継ぐには次のようにCallNextHookEx関数を用いる。lParam);hhookはフックハンドル。CallNextHookEx関数の戻り値ではなくゼロを返すと、メッセージがメッセージキューから削除される。代わりのメッセージを投げる場合などにゼロ戻り値を使用することになりそう。フックを解除するUnhookWindowsHookEx関数を用いる。関数定義は以下の通り。成功すれば0以外の整数値を返す。削除対象のフックプロシージャのハンドル);引数にはフック時に取得したフックハンドルを与える。