Как зарегистрировать горячую клавишу для комбинации трех клавиш с помощью c # - PullRequest
7 голосов
/ 04 июня 2010

Я сделал глобальные горячие клавиши для комбинации двух клавиш, используя приведенный ниже код. Как я могу сделать одну и ту же операцию для трех комбинаций клавиш, таких как (Ctrl + Shift + Esc) (Ctrl + Shift + Tab) ??

Код для комбинации двух клавиш:

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

Ответы [ 2 ]

14 голосов
/ 04 июня 2010

Вы можете просто "или" значения вместе:

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

Обратите внимание, что MOD_ALT и друзья определены в WinUser.h как:

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

Таким образом, вы должны убедиться, что передаете правильные значения для модификаторов.

1 голос
/ 04 июня 2010

Как это:

Keys.Control | Keys.Shift | Keys.Tab
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...