const
WH_KEYBOARD_LL = 13;
type
PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;
TKBDLLHOOKSTRUCT = packed record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: DWORD;
end;
var
llKeyboardHook: HHOOK = 0;
function LowLevelKeyboardHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): HRESULT; stdcall;
var
pkbhs: PKBDLLHOOKSTRUCT;
begin
pkbhs := PKBDLLHOOKSTRUCT(Pointer(lParam));
if nCode = HC_ACTION then
fMain.Caption := '0x' + IntToHex(pkbhs^.scanCode, 2);
Result := CallNextHookEx(llKeyboardHook, nCode, wParam, lParam);
end;
function TfMain.Start: boolean;
begin
if llKeyboardHook = 0 then
llKeyboardHook := SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardHook, HInstance, 0);
Result := (llKeyboardHook <> 0)
end;