Codul transmis de Jens Borrisholt. Text de Zarko Gajic.
De Jens: Hooks, am văzut o mulțime de oameni care încearcă să creeze o soluție curată pentru conectarea mesajelor într-o aplicație. Așa că am decis cu ceva timp în urmă să implementez cârlige ca o clasă, cu evenimente și lucruri frumoase :)
Hook.pas face posibilă atribuirea unui pointer de metodă unui indicator de procedură (cu ceva ajutor din partea asamblatorului).
De exemplu: dacă doriți să capturați TOATE loviturile de taste din aplicația dvs. - declarați pur și simplu o instanță a TKeyboardHook, alocați un handler de evenimente pentru OnPreExecute sau OnPostExecute, sau pentru ambele. Setați-vă KeyboadHook activ (KeyboardHook.Active: = True) și sunteți în funcțiune ...
Un cârlig este un punct din mecanismul de gestionare a mesajelor de sistem în care o aplicație poate instala o subrutină pentru a monitoriza traficul de mesaje în sistem și a procesa anumite tipuri de mesaje înainte de a ajunge la procedura ferestrei țintă..
În scurt timp, un cârlig este o funcție pe care o puteți crea ca parte a unui dll sau a unei aplicații pentru a monitoriza „funcționarea” în sistemul de operare Windows.
Ideea este să scrieți o funcție care se numește de fiecare dată când are loc un anumit eveniment în Windows - de exemplu, atunci când un utilizator apasă o tastă pe tastatură sau mișcă mouse-ul.
Pentru o introducere mai detaliată a cârligelor, aruncați o privire la ce sunt cârligele Windows și cum să le utilizați într-o aplicație Delphi.
Mecanismul de cârlig se bazează pe mesajele Windows și funcțiile de returnare.
De exemplu:
Puteți utiliza cârligul WH_KEYBOARD pentru a monitoriza introducerea tastaturii postate la o coadă de mesaje;
Puteți utiliza cârligul WH_MOUSE pentru a monitoriza introducerea mouse-ului postată la o coadă de mesaje;
Puteți proceda de cârlig WH_SHELL când aplicația shell este pe punctul de a fi activată și când o fereastră de nivel superior este creată sau distrusă.
Descărcați hooks.pas + aplicație demo
folosește cârlige, ...
var
KeyboardHook: TKeyboardHook;
...
// MainForm's OnCreate Handlerprocedure eveniment TMainForm.FormCreate (Expeditor: TObject);
începe
KeyboardHook: = TKeyboardHook.Create;
KeyboardHook.OnPreExecute: = KeyboardHookPREExecute;
KeyboardHook.Active: = True;
Sfârșit;
// mânuie OnPREExecuteprocedure KeyboardHook TMainForm.KeyboardHookPREExecute (Hook: THook; var Hookmsg: THookMsg);
var
Cheie: Cuvânt;
începe
// Aici puteți alege dacă doriți să întoarceți // cursa tastei în aplicație sau nu
Hookmsg.Result: = IfThen (cbEatKeyStrokes.Checked, 1, 0);
Cheie: = Hookmsg.WPARAM;
Subtitrare: = Char (cheie);
Sfârșit;
Gata, setat, cârlig :)