...........
var
WHookKeyboard: HHOOK = 0;
implementation
{$R *.dfm}
function KeyboardHook(Code, wParam, lParam: Integer): Integer; stdcall;
var
vkCode: DWORD;
AltDown: boolean;
CtlDown: boolean;
ShiftDown: boolean;
begin
vkCode:= PDWORD(lParam)^;
AltDown := (GetAsyncKeyState(VK_LMENU) and $8000 <> 0) or (GetAsyncKeyState(VK_RMENU) and $8000 <> 0);
CtlDown := GetAsyncKeyState(VK_CONTROL) and $8000 <> 0;
ShiftDown := GetAsyncKeyState(VK_SHIFT) and $8000 <> 0;
if (Code = HC_ACTION and (wParam = WM_KEYDOWN) then
begin
if vkCode = VK_F1 then
begin
if AltDown then Windows.Beep(1000, 100);
Result:= 1;
exit;
end;
end;
Result:= CallNextHookEx(WHookKeyboard, Code, wParam, lParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
WHookKeyboard:= SetWindowsHookEx(13, @KeyboardHook, GetModuleHandle(nil), 0);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnhookWindowsHookEx(WHookKeyboard);
end;