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

Материал из DRKB

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

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


Source: http://delphiworld.narod.ru/
ID: 01605