Содержание материала

Файлы для демонстрации можно взять здесь: 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;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить