2011-02-08 7 views
1

MS Officeでホットキーをプログラムでオーバーライドする方法を教えてください。MSオフィスのホットキーを無効にする

他のアプリケーションで動作するが、どのMS Officeアプリケーションでも試してみると、グローバルホットキー(、CTRL + SHIFT + 1)があります。私のアプリをシャットダウンすると、ホットキーはMS Officeで再び動作します。あなたはあなたがすべてのスレッドからのすべてのキー入力をフックすることができますは、SetWindowsHookExで行くと0

へのdwThreadIdを設定する必要が

+2

なぜ 'Python'タグですか? – user225312

+0

Pythonに関連するのはなぜですか?どのIDEやコンパイラを使用しましたか、どのようにしてグローバルホットキーなどを定義しましたか?おそらく、あなたはWindows、どのバージョンとSPで動作していますか? – smci

答えて

0

答え。これはまた、フックをdescibes。

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

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

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

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

//It's worth noting here that if you subscribe to the Key_Press event then it will break the international accent keys. 
HookManager.KeyPress += HookManager_KeyPress; 
HookManager.KeyDown += HookManager_KeyDown; 
HookManager.KeyUp += HookManager_KeyUp; 

また、マウスイベントを追加することができますが、簡単にするために、私はちょうどキーボードフックを示しています。

私は現在、どのキーが現在停止しているかを知り、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)) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
関連する問題