2010-06-04 3 views
6

Registrieren Ich habe die globalen Hotkeys für zwei Tastenkombination mit den folgenden Code gemacht. Wie kann ich die gleiche Operation für drei Tastenkombinationen wie (Strg + Shift + Esc) (Strg + Shift + Tab) ??Wie Hotkey für Drei-Tasten-Kombination mit C#

-Code für zwei Tastenkombination:

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

Antwort

13

Sie können einfach "oder" die Werte zusammen:

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

Beachten Sie, dass MOD_ALT und Freunde sind definiert in WinUser.h als:

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

Sie müssen also sicherstellen, dass Sie dort die richtigen Werte für die Modifikatoren übergeben.

+2

Eigentlich bin ich nicht sicher, "Alt + Shift + Tab" ist möglich, da es bereits von der Task Switcher verwendet wird, aber Sie bekommen die Idee ... –

0

So:

Keys.Control | Keys.Shift | Keys.Tab