2009-03-01 18 views
1

C#:複数のキーのショートカットをグローバルに監視するのに最適なフックはどれですか?C#:複数キーのショートカットをグローバルに監視するのに最適なフックはどれですか?

LowLevelKeyboardProcとKeyboardProcがあります。 Windowsで Alt + Qなどのキーの組み合わせを監視し、Alt + Qが押されたことに基づいてアクションを実行します。フックコールバックで各キーを1つずつ監視するのではなく、ホットキーのすべてのキーが現在押されているかどうかを検出すると、どのフックが使用するのが最適なオプションになりますか?

答えて

2

あなたには選択肢がありません。WH_KEYBOARD_LLだけがC#で書くことができます。 WH_KEYBOARDは、別のプロセスで注入可能なDLLを書き込む必要があります。マネージコードでは不可能ですが、CLRを適切に初期化することはできません。

RegisterHotKey()も検討してください。サンプルコードis thereでは、C#がページのさらに下に表示されます。

0

ハンス・パサントの答えに記載されているように、技術的には、WH_KEYBOARD_LLフックに接続する以外の方法はありません。それにもかかわらず、便利なマネージラッパーを提供するマネージライブラリMouseKeyHook as nugetがあります。 Source code on github

最近、ショートカット、キーの組み合わせおよびシーケンスの検出のサポートが追加されました。

void DoSomething() 
{ 
    Console.WriteLine("You pressed UNDO"); 
} 

Hook.GlobalEvents().OnCombination(new Dictionary<Combination, Action> 
{ 
    {Combination.FromString("Control+Z"), DoSomething}, 
    {Combination.FromString("Shift+Alt+Enter"),() => { Console.WriteLine("You Pressed FULL SCREEN"); }} 
}); 

詳細については以下を参照してください:Detecting Key Combinations and Seuqnces

をここでは使用例があります
関連する問題