var
hNextHookProc: HHook;
procSaveExit: Pointer;
function KeyboardHookHandler(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;
function EnableHotKeyHook: BOOL; export;//使HOOK生效
function DisableHotKeyHook: BOOL; export;//使HOOK失效
procedure HotKeyHookExit; far;//
implementation
function KeyboardHookHandler(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;
const
—KeyPressMask = $80000000;
begin
Result := 0;
If iCode < 0 Then
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
//捕捉CRTL+N
if ((lParam and —KeyPressMask) = 0) and (GetKeyState(vk—Control) < 0) and (wParam = Ord(′N′)) then
begin
Result := 1;
WinExec(′Notepad.exe′, sw—Normal);//每当用户按下CRTL+N时运行记事本程序
end;
end;
function EnableHotKeyHook: BOOL; export;
begin
Result := False;
if hNextHookProc <> 0 then Exit; // 连接到WH—KEYBOARD HOOK链,以捕捉击键动作。同时保留传回值以免HOOK链中断
hNextHookProc := SetWindowsHookEx(WH—KEYBOARD, KeyboardHookHandler, HInstance, 0);
Result := hNextHookProc <> 0;
end;
function DisableHotKeyHook: BOOL; export;
begin
if hNextHookProc <> 0 then
begin
UnhookWindowshookEx(hNextHookProc); //解除 Keyboard Hook
hNextHookProc := 0;
MessageBeep(0);
MessageBeep(0);
end;
Result := hNextHookProc = 0;
end;
procedure HotKeyHookExit;
begin
// 如果忘了解除HOOK,自动代理解除HOOK
if hNextHookProc <> 0 then DisableHotKeyHook;
ExitProc := procSaveExit;
end;