web-dev-qa-db-ja.com

フォーム外のマウス/キーボードイベントのキャプチャ(アプリはバックグラウンドで実行されています)

バックグラウンドで実行されるアプリがあります(最小化/タスクトレイ)。キーボードのアクティビティだけでなく、マウスのアクティビティ(クリック、移動)も検出できる必要があります。

ウィンドウが「フォーカス」されていないという制約がある場合、これを行うための最良の方法は何ですか?

15
Andy Hin

魔法の言葉は窓のフックです。これらは、 SetWindowsHookEx へのp/invoke呼び出しで作成されます。キーボードやマウスのイベントなどを監視するためのフックを設定できます。通常、このようなフックはアプリケーションに対してローカルですが、グローバルフックを作成することもできます。 Microsoft KB shows 方法。

ただし、すべてのタイプのグローバルフックを.NETから使用できるわけではないことに注意してください。特に、使用できることができるのは2つだけです:低レベルキーボードとマウスのフック、 として知られている WH_KEYBOARD_LLおよびWH_MOUSE_LL。幸いなことに、これらはまさにあなたが必要とするものです。

10
Thomas

このライブラリを見てください http://globalmousekeyhook.codeplex.com/ 。グローバルなマウスとキーボードのフックをインストールするのは100%管理されたc#コードです。低レベルのフックを一般的なウィンドウフォームのキーボードおよびマウスイベントにラップします。

14