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