2008-10-10 80 views
0

疑難問題。答案可能不是,如果我在Intertubes中找到的都是對的,但值得一試。我需要重寫按Ctrl ++ Esc鍵按Ctrl + Esc鍵組合。如果能夠覆蓋Win組合鍵將會很好,但我有一個低級別的掛鉤,我只希望我不需要它。如果我能夠完全按照策略阻止開始菜單和任務管理器,則不再需要覆蓋,但是我找不到正確的策略來執行此操作。熱鍵覆蓋

回答

-2

所以你需要覆蓋你的應用程序的熱鍵? 那麼答案可能是,如何? 不知道,但如果這(http://www.inchwest.com/mapkeyboard.aspx)程序,這樣,可以

+0

他通過使用低級別的鍵盤掛鉤來完成。但這些不適用於CTRL + SHIFT + ESC和CTRL + ESC組合。 – 2008-10-10 19:27:38

1

您可以覆蓋按Ctrl + Esc鍵(我只是嘗試在AutoHotkey的,它的工作原理),但不按Ctrl + + Esc鍵,不超過按Ctrl + Alt鍵+德爾

因此,使用政策可能是要走的路......在這個領域沒有經驗,我擔心。

0

如果有人來這裏尋找非AutoHotKey,這裏是一個C#方式。

使用鍵盤掛鉤可以做到這一點。這方面的一個良好的鉤類可以在此CodeProject Article

發現使用以下代碼將防止WIN + LEFTWIN + RIGHT的發生。你可以用它來覆蓋你想要的任何鍵。

這甚至會覆蓋您通過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; 
      } 
     }