2008-10-10 7 views
0

어려운 질문입니다. Intertubes에서 찾은 모든 것이 맞다면 대답은 아마도 아니오입니다.하지만 시도해 볼 가치가 있습니다. 나는 Ctrl 키 + 시프트 + 에게 Esc를를 재정의해야하고 Ctrl 키 + Esc를 조합. Win 키 조합을 덮어 쓸 수 있으면 좋겠지 만, 그런 낮은 수준의 후크가 있습니다. 필자는 그럴 필요가 없었 으면 좋겠어요. 시작 메뉴와 작업 관리자를 정책으로 완전히 차단할 수 있으면 재정의가 더 이상 필요하지 않지만 올바른 정책을 찾을 수 없습니다.단축키 설정

답변

-2

따라서 응용 프로그램에서 핫키를 대체해야합니까? 그러면 대답은 아마도 예일 것입니다. 아무 생각이 없지만,이 (http://www.inchwest.com/mapkeyboard.aspx) 프로그램은, 그래서 당신은

+0

저수준 키보드 후크를 사용합니다. 그러나 이들은 CTRL + SHIFT + ESC 및 CTRL + ESC 조합으로는 작동하지 않습니다. –

1

당신은 대체 할 수 있습니다 할 수있는 경우 Ctrl 키 + Esc를 (난 그냥 작동, AutoHotkey를에 시도),하지만 Ctrl 키 + 시프트 + Esc, 이하 + alt + Del.

그래서 정책을 사용하는 것이 좋습니다 ...이 분야에 대한 경험이 없으므로 걱정됩니다.

0

여기 누군가가 AutoHotKey가 아닌 것을 찾고 있다면 여기에 C# 방식이 있습니다.

키보드 후크를 사용하여이를 수행 할 수 있습니다. 이것에 대한 좋은 후크 클래스는 발생에서 + LEFT 또는 + 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; 
      } 
     }