Создание мышиного перехватчика
Falk0ner, вс, 06/07/2008 - 15:34.
Создание мышиного перехватчика
library Hookdemo;
uses
Beeper in '\DELDEMOS\HOOKDEMO\BEEPER.PAS';
exports
SetHook index 1,
UnHookHook index 2,
HookProc index 3;
begin
HookedAlready:=False;
end.
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 := CallHookEx(ourHook, Code, wParam, lParam);
end;
end.
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 := CallHookEx(ourHook, Code, wParam, lParam);
end;
end.
Теперь, при вызове из приложения функции SetHook, при каждом нажатии левой кнопки мыши будет раздаваться сигнал - до тех пор, пока вы не вызовете функцию UnHookHook. В действующем приложении возвращаемое функцией CallHookEx значение < 0 сведетельствует об отсутствии манипуляций с мышью.
http://delphiworld.narod.ru/
DelphiWorld 6.0
Отправить комментарий