2010-06-04 22 views
6

He hecho las teclas rápidas globales para dos combinaciones de teclas usando el siguiente código. ¿Cómo puedo hacer la misma operación para tres combinaciones de teclas como (ctrl + shift + esc) (ctrl + shift + tab)?Cómo registrar la combinación de teclas para tres teclas usando C#

Código para dos combinación de teclas:

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); 
     } 
    } 

Respuesta

13

Usted puede simplemente "o" los valores juntos:

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

Tenga en cuenta que MOD_ALT y amigos están definido en WinUser.h como:

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

Así que debe asegurarse de estar pasando los valores correctos para los modificadores allí.

+2

En realidad, no estoy seguro de que "Alt + Mayús + Tab" sea posible, ya que ya lo usó el conmutador de tareas, pero se entiende la idea ... –

0

De esta manera:

Keys.Control | Keys.Shift | Keys.Tab 
Cuestiones relacionadas