const
KeybHook: Hhook = 0;
VirtualKey: integer = 0;
function KeyboardProc(HookCode: Integer; KeyCode: WPARAM;
Info: LPARAM): LRESULT; stdcall;
begin
if (HookCode = HC_ACTION) and (KeyCode = VirtualKey) and (Info < 0) then
// ----------- irgendwas, z.B.:
MessageBox(0, 'Die Taste wurde soeben gedrückt und wieder losgelassen!',
'ACHTUNG', MB_ICONINFORMATION);
// ---------------------------
result := CallNextHookEx(KeybHook, HookCode, KeyCode, Info);
end;
procedure HookInst(VKey: integer);
begin
if KeybHook <> 0 then exit;
if VKey in [1..254] then begin
VirtualKey := VKey;
KeybHook := SetWindowsHookEx(WH_KEYBOARD, KeyboardProc,
HInstance, GetCurrentThreadId);
end;
if KeybHook = 0 then
MessageBox(0, 'Der Keyboard-Hook wurde nicht installiert!',
'FEHLER', MB_ICONERROR);
end;
procedure HookUninst;
begin
if KeybHook <> 0 then UnhookWindowsHookEx(KeybHook);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
HookUninst;
end;
// --- Beispielaufrufe ---
// Taste "a" wird abgefragt
procedure TForm1.Button6Click(Sender: TObject);
begin
HookInst(ord('A'));
end;
// TAB-Taste
procedure TForm1.Button7Click(Sender: TObject);
begin
HookInst(VK_TAB);
end;
// "5" auf dem abgesetzten Ziffernblock
procedure TForm1.Button8Click(Sender: TObject);
begin
HookInst(VK_NUMPAD5);
end;