eToolkit modules > RegisterHotKey
pmhotkey.dll - Global Hotkeys
Данная библиотека позволяет приложению регистрировать в системе горячие клавиши - клавиши и их сочетания, при нажатии на которые программа получает соответствующее уведомление. Горячие клавиши работают глобально в среде PM - приложение будет получать уведомления вне зависимости от того, какое окно активно (какому окну в данный момент принадлежит фокус ввода). Библиотека требует минимума ресурсов: имеет объём всего 1777 байт и грузится в память один раз при первой регистрации горячей клавиши приложением. Для всех приложений, использующих данную библиотеку используется единый сегмент разделяемой памяти, объёмом в 4 кб и один мутекс. Библиотека автоматически выгружается из памяти, как только все приложения прекращают её использование.
Библиотека экспортирует 2 функции:
APIRET EXPENTRY RegisterHotKey(HWND hwnd, USHORT id, USHORT fsFlags, BYTE ucScanCode); - регистрация горячей клавиши
APIRET EXPENTRY UnregisterHotKey(HWND hwnd, USHORT id); - отмена регистрации горячей клавиши
Эти функции практически полностью повторяют по функционалу и параметрам одноимённые функции Windows. Единственное различие - вместо кода виртуальной клавиши передаётся аппаратный сканкод. Дело в том, что во-первых, в PM, в отличие от Windows, коды виртуальных клавиш есть только у клавиш, которым не соответствуют печатные символы. Соответственно, было бы не возможно регистрировать в качестве горячих алфавитно-цифровые клавиши. Кроме того, в PM VIO (текстовые) окна ведут себя не так, как обычные, графические: сообщения WM_CHAR, приходящие в них, содержат только аппаратный сканкод. Ни символа, ни кода виртуальной клавиши они не содержат. Таким образом, горячие клавиши не срабатывали бы, пока активным является VIO-окно.
Для удобства, для аппаратных скан-кодов клавиш стандартной 105-клавишной клавиатуры определены макросы в файле scancode.h
Подробнее о параметрах:
- HWND hwnd - дескриптор окна, которое будет получать сообщение WM_HOTKEY при нажатии горячей клавиши. Если парамтр равен NULLHANDLE, сообщение будет приходить не конкретному окну, а в очередь сообщений треда, вызвавшего функцию RegisterHotkey.
- USHORT id - идентификатор горячей клавиши. Он будет приходить в качестве первого параметра (mp1) сообщения WM_HOTKEY.
- USHORT fsFlags - флаги горячей клавиши. Указывают, какие клавиши должны быть нажаты одновременно с указанной, чтобы она сработала. Допустимые значения - KC_SHIFT, KC_CTRL, KC_ALT.
- BYTE ucScanCode - аппаратнй скан-код клавиши.
Для отмены регистрации горячей клавиши, функции UnregisterHotkey() следует передать те же значения hwnd и id, какие были указаны при вызов RegisterHotkey(). Таким образом, id должен быть уникален в пределах одного окна или одной очереди сообщений. Для разных окон/очередей значения id могут совпадать.
Параметры сообщения WM_CHAR:
- mp1: USHORT id - идентификатор горячей клавиши
- mp2: USHORT fsFlags - флаги, указывающие на то, какие клавиши Ctrl, Alt и Shift были нажаты
- USHORT usScancode - аппаратный скан-код нажатой клавиши
|