Перехват мыши
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 сведетельствует об отсутствии манипуляций с мышью.