ブログ・コラム

2019年07月

2019.07.03

【C#】マウスフック

キーボードフックの記事にも記載しましたが、Windowsシステムは、メッセージキューにメッセージが蓄積され、メッセージループによってイベントが処理されていきます。

マウスを左クリックした、マウスを動かしたなどのイベントをwindowが非アクティブ状態で取得したい場合は、マウスのイベントをフックする必要があります。

以下にサンプルソースを掲載します。

サンプルソース

namespaceなどは適宜読み替えてください。

イベントをフックする場合は、DLL(user32.dll)にあるSetWindowsHookEx関数を使用して指定します。

この関数の引数の意味は下記のとおりです。

第1引数 フックするイベントの種類

マウスのイベントをフックする場合は、
WH_MOUSE_LL(14)を指定する。

第2引数 フック時の関数のアドレス イベントが発生した時に実行される関数。
第3引数 インスタンスハンドル 現在実行中のハンドルを渡す。
第4引数 スレッドID 0を指定すると、すべてのスレッドでフックされる。

サンプルソースのように指定すると、マウスボタンのクリック、マウス移動などのイベントが発生する都度EventMouse関数が呼ばれるようになります。

サンプルでは、マウスの座標をデリゲート関数に渡しています。

最後にCallNextHookEx関数を実行していますが、これは次のフックプロシージャ―へ渡すために実行しています。もしここで終了する場合は0を返すようにします。

このサンプルは、下記のように実行すると、MouseEvent関数が実行されます。

※このサンプルソースに対するいかなる損害に対して、当方は一切の責任を負いかねます。
自己責任でお願いします。

カレンダー

«7月»
 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31    

ブログ内検索

アーカイブ