library Hookdemo;
uses
Beeper in '\DELDEMOS\HOOKDEMO\BEEPER.PAS';
exports SetHook index 1, UnHookHook index 2, HookProc index 3; begin HookedAlready:=False; end. , где beeper.pas содержит следующий код: unit Beeper;
interface
uses Wintypes,Winprocs,Messages;
function SetHook:Boolean;export; function UnHookHook:Boolean;export; function HookProc(Code:integer; wParam: Word; lParam: Longint): Longint;export;
var HookedAlready:Boolean;
implementation
var ourHook:HHook;
function SetHook:Boolean; begin if HookedAlready then exit; ourHook:=SetWindowsHookEx(WH_MOUSE,HookProc,HInstance,0); HookedAlready:=True; end;
function UnHookHook:Boolean; begin UnHookWindowsHookEx(ourHook); HookedAlready:=False; end;
function HookProc(Code:integer; wParam: Word; lParam: Longint): Longint; begin if (wParam=WM_LBUTTONDOWN) then MessageBeep(0); result:=CallNextHookEx(ourHook,Code,wParam,lParam); end;
end. Теперь, при вызове из приложения функции SetHook, при каждом нажатии левой кнопки мыши будет раздаваться сигнал - до тех пор, пока вы не вызовете функцию UnHookHook. В действующем приложении возвращаемое функцией CallNextHookEx значение < 0 сведетельствует об отсутствии манипуляций с мышью. |