バックグラウンドで実行されるアプリがあります(最小化/タスクトレイ)。キーボードのアクティビティだけでなく、マウスのアクティビティ(クリック、移動)も検出できる必要があります。
ウィンドウが「フォーカス」されていないという制約がある場合、これを行うための最良の方法は何ですか?
魔法の言葉は窓のフックです。これらは、 SetWindowsHookEx
へのp/invoke呼び出しで作成されます。キーボードやマウスのイベントなどを監視するためのフックを設定できます。通常、このようなフックはアプリケーションに対してローカルですが、グローバルフックを作成することもできます。 Microsoft KB shows 方法。
ただし、すべてのタイプのグローバルフックを.NETから使用できるわけではないことに注意してください。特に、使用できることができるのは2つだけです:低レベルキーボードとマウスのフック、 として知られている WH_KEYBOARD_LL
およびWH_MOUSE_LL
。幸いなことに、これらはまさにあなたが必要とするものです。
このライブラリを見てください http://globalmousekeyhook.codeplex.com/ 。グローバルなマウスとキーボードのフックをインストールするのは100%管理されたc#コードです。低レベルのフックを一般的なウィンドウフォームのキーボードおよびマウスイベントにラップします。