library GlobalHooks;uses Windows;{$R *.res}const WH_KEYBOARD_LL = 13; WH_MOUSE_LL = 14;type TKeyboardHook = record Hook: HHOOK; Callback: function(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; end; TMouseHook = record Hook: HHOOK; Callback: function(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; end;var KeyboardHook: TKeyboardHook; MouseHook: TMouseHook;function KeyboardHookCallback(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;begin if (nCode = HC_ACTION) and ((wParam = WM_KEYDOWN) or (wParam = WM_KEYUP)) then begin // 处理键盘事件 // ... end; Result := CallNextHookEx(KeyboardHook.Hook, nCode, wParam, lParam);end;function MouseHookCallback(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;begin if (nCode = HC_ACTION) and ((wParam = WM_LBUTTONDOWN) or (wParam = WM_LBUTTONUP) or (wParam = WM_RBUTTONDOWN) or (wParam = WM_RBUTTONUP)) then begin // 处理鼠标事件 // ... end; Result := CallNextHookEx(MouseHook.Hook, nCode, wParam, lParam);end;function InstallKeyboardHook(Callback: function(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT): Boolean;begin Result := False; if not Assigned(Callback) then Exit; if Assigned(KeyboardHook.Callback) then Exit; KeyboardHook.Hook := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardHookCallback, HInstance, 0); if KeyboardHook.Hook = 0 then Exit; KeyboardHook.Callback := Callback; Result := True;end;function InstallMouseHook(Callback: function(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT): Boolean;begin Result := False; if not Assigned(Callback) then Exit; if Assigned(MouseHook.Callback) then Exit; MouseHook.Hook := SetWindowsHookEx(WH_MOUSE_LL, @MouseHookCallback, HInstance, 0); if MouseHook.Hook = 0 then Exit; MouseHook.Callback := Callback; Result := True;end;function RemoveKeyboardHook: Boolean;begin Result := False; if KeyboardHook.Hook = 0 then Exit; if UnhookWindowsHookEx(KeyboardHook.Hook) then begin KeyboardHook.Hook := 0; KeyboardHook.Callback := nil; Result := True; end;end;function RemoveMouseHook: Boolean;begin Result := False; if MouseHook.Hook = 0 then Exit; if UnhookWindowsHookEx(MouseHook.Hook) then begin MouseHook.Hook := 0; MouseHook.Callback := nil; Result := True; end;end;exports InstallKeyboardHook, InstallMouseHook, RemoveKeyboardHook, RemoveMouseHook;beginend.