2017-04-07 3 views
1

特定のホットキーを登録しようとしていますが、Windowsの既定値であるためできません。C#でWindows 10のホットキーを無効/無効にする方法

CTRL+WIN+1 minimizes the current window. I'd like it to do something else. 
I'd like to completely disable WIN+LEFT/RIGHT. 
I'm also trying to handle the CTRL+WIN+Arrow in my own virtual desktop manager. 

zVirtualDesktop

これは、必要に応じてC#とのWin32 APIを使用して行う必要があります。 Autohotkeyは絶対使用できません。

私はどのページをどのようにAutoHotKeyでこれを行うことができますdescibes見つける。

私はコードを投稿したいと思いますが、どこから始めたらいいかわかりません。私はホットキーを登録するためにWin32を使用します。私はそれらをオーバーライドする方法があると仮定しますが、私は情報を見つけることができません。

アイデアはありますか?

+0

これは_ [XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)_の例ですか?キオスクアプリケーションを作成しようとしていますか? – MickyD

+0

いいえ、個人的なレベルでは、私はWIN + LEFT/RIGHTに立つことができません。また、私はこれに取り組んでいます... https://github.com/mzomparelli/zVirtualDesktop –

+0

私は今コードをダウンしました。私はそれを元に戻すかもしれない。すべてのコミットはまだそこにあります。 –

答えて

3

キーボードフックを使用してこれを行うことができます。このため、良好なフッククラスが発生WIN + LEFT又はWIN + RIGHTを防止する以下のコードを使用して、このCodeProject Article

に見出すことができます。これを使用して、好きなキーを上書きすることができます。

これは、RegisterHotKey Win API経由で追加したホットキーを無効にします。

プロジェクトにこれらのクラスが追加されたら、以下のように静的なHookManagerクラスにハンドラを追加できます。

マウスイベントを追加することもできますが、わかりやすくするために、キーボードフックを表示しています。

私は現在、どのキーが現在停止しているかを知り、KeyUpイベントのリストからそれらのキーを削除するために汎用リストを作成しました。

public static List<Keys> keysDown = new List<Keys>(); 
private static void HookManager_KeyDown(object sender, KeyEventArgs e) 
     { 
      //Used for overriding the Windows default hotkeys 
      if(keysDown.Contains(e.KeyCode) == false) 
      { 
       keysDown.Add(e.KeyCode); 
      } 

      if (e.KeyCode == Keys.Right && WIN()) 
      { 
       e.Handled = true; 
       //Do what you want when this key combination is pressed 
      } 
      else if (e.KeyCode == Keys.Left && WIN()) 
      { 
       e.Handled = true; 
       //Do what you want when this key combination is pressed 
      } 

     } 

     private static void HookManager_KeyUp(object sender, KeyEventArgs e) 
     { 
      //Used for overriding the Windows default hotkeys 
      while(keysDown.Contains(e.KeyCode)) 
      { 
       keysDown.Remove(e.KeyCode); 
      } 
     } 

     private static void HookManager_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      //Used for overriding the Windows default hotkeys 

     } 

     public static bool CTRL() 
     { 
      //return keysDown.Contains(Keys.LShiftKey) 
      if (keysDown.Contains(Keys.LControlKey) || 
       keysDown.Contains(Keys.RControlKey) || 
       keysDown.Contains(Keys.Control) || 
       keysDown.Contains(Keys.ControlKey)) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 

     public static bool SHIFT() 
     { 
      //return keysDown.Contains(Keys.LShiftKey) 
      if (keysDown.Contains(Keys.LShiftKey) || 
       keysDown.Contains(Keys.RShiftKey) || 
       keysDown.Contains(Keys.Shift) || 
       keysDown.Contains(Keys.ShiftKey)) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 

     public static bool WIN() 
     { 
      //return keysDown.Contains(Keys.LShiftKey) 
      if (keysDown.Contains(Keys.LWin) || 
       keysDown.Contains(Keys.RWin)) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 

     public static bool ALT() 
    { 
     //return keysDown.Contains(Keys.LShiftKey) 
     if (keysDown.Contains(Keys.Alt) || 
      keysDown.Contains(Keys.LMenu) || 
      keysDown.Contains(Keys.RMenu)) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
+0

こんにちは、どのように進歩していますか?ソリューションの進捗状況どうもありがとうございました – Arthor

関連する問題