- PVSM.RU - https://www.pvsm.ru -
Под комбинацией клавиш понимается любое количество одновременно нажатых клавиш, нажатых в любом порядке, которое может позволить ваша клавиатура. Для конечного пользователя, однако, не стоит превышать количество более пяти в одной комбинации, т.к. игровые клавиатуры есть не у всех.
HotKeysManager manager = new HotKeysManager();
manager.AddHotKey(new HotKeyCombination(() => { MessageBox.Show("Привет!"); }) { Keys.LControlKey, Keys.H });
Другой вариант добавления, где в качестве комбинации берутся текущие нажатые клавиши, удобно в случае когда пользователь назначает комбинацию сам. В демке есть пример подобной записи комбинаций.
manager.AddHotKey(new HotKeyCombination(HookManager.CurrentDownedKeys.ToArray(), () => { MessageBox.Show("Привет!"); }));
Теперь при нажатии комбинации LeftCtrl+H (или H+LeftControl), мы увидим приветственное сообщение.
Используются три WinAPI функции для глобального перехвата нажатий:
/// <summary>
/// Функция передающая перехватываемое сообщение следующему обработчику
/// </summary>
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
/// <summary>
/// Функция устанавливает перехват системных сигналов
/// </summary>
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
private static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, int dwThreadId);
/// <summary>
/// Отключение перехвата системных сигналов
/// </summary>
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
private static extern int UnhookWindowsHookEx(int idHook);
При получении события проверяется была ли нажата или отпущена клавиша, и формируется список текущих нажатых клавиш, после чего вызывается проверка комбинаций, и если есть совпадение идет оповещение.
Перехват нажатий автоматически включается/отключается в зависимости от наличия комбинаций.
Методы:
События:
Свойства:
События:
Скачать (source + bin_x86) [1]
При использовании стоит помнить что перехат идет глобальный, и если требуется совержать действие только при активном окне вашей программы, требуется ввести дополнительную проверку.
Автор: Ogoun
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/net/4462
Ссылки в тексте:
[1] Скачать (source + bin_x86): http://rghost.ru/37290809
Нажмите здесь для печати.