Советы по Delphi


Создание мышиного перехватчика


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

[000183]

Содержание раздела