2008-10-10 6 views
0

Сложный вопрос. Ответ, вероятно, нет, если все, что я нашел в Intertubes, правильно, но стоит попробовать. Мне нужно переопределить Ctrl + SHIFT + Esc и Ctrl + Esc комбинации . Было бы неплохо переопределить комбинации клавиш Win, но у меня есть крюк низкого уровня, который делает это, мне только жаль, что он мне не нужен. Если мне удастся полностью заблокировать начальное меню и диспетчер задач политикой, переопределения больше не понадобятся, но я не смог найти правильную политику для этого.Горячие клавиши override

ответ

-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 + Del.

Так что использование политики - это, пожалуй, путь ... Нет опыта в этой области, я боюсь.

0

В случае, если кто-то приходит сюда, ищет неавтомобильный хост, вот путь C#.

Это можно сделать с помощью крючка для клавиатуры. Хороший класс крюк для этого можно найти на этом CodeProject Article

Используя приведенный ниже код будет препятствовать WIN + ЛЕВЫЙ или WIN + 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; 
      } 
     } 
Смежные вопросы