ブログ・コラム

C#

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関数が実行されます。

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

2019.06.05

【C#】キーボードフック

Windowsシステムは、メッセージキューにメッセージが蓄積され、メッセージループによってイベントが処理されていきます。

キーボードが押された、離されたイベントをwindowが非アクティブ状態で取得する必要がある場合は、キーボードイベントをフックする必要があります。

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

サンプルソース

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

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

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

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

キーボードのイベントをフックする場合は、
WH_KEYBOARD_LL(13)を指定する。

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

サンプルソースのように指定すると、キーが押される/離される毎にEventKey関数が呼ばれるようになります。

サンプルでは、キーが離された時にコンソールへコメントを表示し、処理をするようにしています。

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

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

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

カレンダー

«11月»
     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

ブログ内検索

アーカイブ