Файлы для демонстрации можно взять здесь: https://coolsong.narod.ru/hook.rar
Работает так: при неустановленном хуке правая кнопка работает (о чём свидетельствует нажатие правой кнопки мыши - событие TForm.onMouseDown и сообщение). После установки хука кнопкой "Install", события от мыши перестают обрабатываться (сообщение "Right mouse key pressed" не выдаётся). после снятия хука (кнопка "Remove") - всё возвращается к первоначальному состоянию.
Если требуется перехватывать клавиши, тогда из вышеобозначенной теории нам известны варианты: WH_KEYBOARD, WH_KEYBOARD_LL или WH_GETMESSAGE+WM_CHAR/WM_KEYDOWN/UP
Однако, если требуется перехватить всего лишь отдельную клавишу, будь то одну либо с нажатым Ctrl, Alt, Shift, рациональней для этого воспользоваться назначением горячей клавиши, через RegisterHotKey().
Рабочий пример такого приёма:
Code: |
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); protected procedure hotykey(var msg: TMessage); message WM_HOTKEY; end;
var Form1: TForm1; id, id2: Integer;
implementation
{$R *.DFM}
procedure TForm1.hotykey(var msg: TMessage); begin if (msg.LParamLo = MOD_CONTROL) and (msg.LParamHi = 81) then begin ShowMessage('Ctrl + Q wurde gedrьckt !'); end;
if (msg.LParamLo = MOD_CONTROL) and (msg.LParamHi = 82) then begin ShowMessage('Ctrl + R wurde gedrьckt !'); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin id := GlobalAddAtom('hotkey'); RegisterHotKey(handle, id, mod_control, 81);
id2 := GlobalAddAtom('hotkey2'); RegisterHotKey(handle, id2, mod_control, 82); end;
procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotKey(handle, id); UnRegisterHotKey(handle, id2); end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!