ブログ・コラム
2019.06.05
【C#】キーボードフック
Windowsシステムは、メッセージキューにメッセージが蓄積され、メッセージループによってイベントが処理されていきます。
キーボードが押された、離されたイベントをwindowが非アクティブ状態で取得する必要がある場合は、キーボードイベントをフックする必要があります。
以下にサンプルソースを掲載します。
サンプルソース
namespaceなどは適宜読み替えてください。
イベントをフックする場合は、DLL(user32.dll)にあるSetWindowsHookEx関数を使用して指定します。
この関数の引数の意味は下記のとおりです。
第1引数 | フックするイベントの種類 |
キーボードのイベントをフックする場合は、 |
---|---|---|
第2引数 | フック時の関数のアドレス | イベントが発生した時に実行される関数。 |
第3引数 | インスタンスハンドル | 現在実行中のハンドルを渡す。 |
第4引数 | スレッドID | 0を指定すると、すべてのスレッドでフックされる。 |
サンプルソースのように指定すると、キーが押される/離される毎にEventKey関数が呼ばれるようになります。
サンプルでは、キーが離された時にコンソールへコメントを表示し、処理をするようにしています。
最後にCallNextHookEx関数を実行していますが、これは次のフックプロシージャ―へ渡すために実行しています。もしここで終了する場合は0を返すようにします。
このサンプルは、下記のように実行すると、キーが離される毎にKeyEvent関数が実行されます。
※このサンプルソースに対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。