2010-06-04 10 views
6

Wykonałem globalne skróty klawiszowe dla dwóch kombinacji klawiszy za pomocą poniższego kodu. Jak mogę wykonać tę samą operację dla trzech kombinacji klawiszy, takich jak (ctrl + shift + esc) (ctrl + shift + tab)?Jak zarejestrować klawisz skrótu dla kombinacji trzech klawiszy za pomocą C#

Kod dla dwóch kombinacji klawiszy:

var TabShift = Keys.Tab | Keys.Shift; 
    RegisterGlobalHotKey(TabShift, USE_ALT); 


    DllImport("user32.dll")] 


    private static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk); 

    [DllImport("user32.dll")] 
    private static extern int UnregisterHotKey(IntPtr hwnd, int id); 


    private void RegisterGlobalHotKey(Keys hotkey, int modifiers) 
    { 
     try 
     { 
      // increment the hot key value - we are just identifying 
      // them with a sequential number since we have multiples 
      mHotKeyId++; 

      if (mHotKeyId > 0) 
      { 
       // register the hot key combination 
       if (RegisterHotKey(this.Handle, mHotKeyId, modifiers, Convert.ToInt16(hotkey)) == 0) 
       { 
        // tell the user which combination failed to register - 
        // this is useful to you, not an end user; the end user 
        // should never see this application run 
        MessageBox.Show("Error: " + mHotKeyId.ToString() + " - " + 
         Marshal.GetLastWin32Error().ToString(), 
         "Hot Key Registration"); 
       } 
      } 
     } 
     catch 
     { 
      // clean up if hotkey registration failed - 
      // nothing works if it fails 
      UnregisterGlobalHotKey(); 
     } 
    } 

    private void UnregisterGlobalHotKey() 
    { 
     // loop through each hotkey id and 
     // disable it 
     for (int i = 0; i < mHotKeyId; i++) 
     { 
      UnregisterHotKey(this.Handle, i); 
     } 
    } 

Odpowiedz

13

Można po prostu "lub" wartości ze sobą:

// Alt + Shift + Tab 
RegisterGlobalHotKey(Keys.Tab, MOD_ALT | MOD_SHIFT); 

Zauważ, że MOD_ALT i przyjaciele zdefiniowane w WinUser.h jako:

#define MOD_ALT   0x0001 
#define MOD_CONTROL  0x0002 
#define MOD_SHIFT  0x0004 
#define MOD_WIN   0x0008 

Musisz więc upewnić się, że podajesz poprawne wartości dla modyfikatorów.

+2

Właściwie nie jestem pewien "Alt + Shift + Tab" jest możliwe, ponieważ jest już używany przez przełącznik zadań, ale masz pomysł ... –

0

Jak to:

Keys.Control | Keys.Shift | Keys.Tab 
Powiązane problemy