Koden lämnad av Jens Borrisholt. Text av Zarko Gajic.
Av Jens: Hooks, jag har sett många människor försöka göra en ren lösning för att ansluta meddelanden i en applikation. Så jag bestämde mig för en tid sedan att implementera krokar som en klass, med trevliga evenemang och grejer :)
Hook.pas gör det möjligt att tilldela en metodpekare till en procedurpekare (med lite hjälp från monteraren).
Till exempel: om du vill fånga ALLA tangenttryckningar i din applikation - förklar bara en förekomst av TKeyboardHook, tilldela en händelseshanterare för OnPreExecute eller OnPostExecute, eller båda. Ställ in KeyboadHook aktiv (KeyboardHook.Active: = True) och du är ute och kör ...
En krok är en punkt i systemmeddelandehanteringsmekanismen där en applikation kan installera en subroutine för att övervaka meddelandetrafiken i systemet och bearbeta vissa typer av meddelanden innan de når målfönstret.
Kort sagt är en krok en funktion som du kan skapa som en del av en dll eller din applikation för att övervaka "händelserna" i Windows operativsystem.
Tanken är att skriva en funktion som kallas varje gång en viss händelse i windows inträffar - till exempel när en användare trycker på en tangent på tangentbordet eller flyttar musen.
För en mer djupgående introduktion till krokar, titta på vad Windows-krokar är och hur du använder dem i en Delphi-applikation.
Kopplingsmekanismen är beroende av Windows-meddelanden och återuppringningsfunktioner.
Till exempel:
Du kan använda WH_KEYBOARD-kroken för att övervaka tangentbordsinmatningen som är postad i en meddelandekö;
Du kan använda WH_MOUSE-kroken för att övervaka musinmatningen som är postad i en meddelandekö;
Du kan ha en WH_SHELL krokprocedur när skalapplikationen håller på att aktiveras och när ett toppfönster skapas eller förstörs.
Ladda ner hooks.pas + demo-applikation
använder krokar, ...
var
KeyboardHook: TKeyboardHook;
...
// MainForms OnCreate-evenemangshanterare-procedur TMainForm.FormCreate (avsändare: TObject);
Börja
KeyboardHook: = TKeyboardHook.Create;
KeyboardHook.OnPreExecute: = KeyboardHookPREExecute;
KeyboardHook.Active: = True;
slutet;
// hanterar KeyboardHook's OnPREExecuteprocedure TMainForm.KeyboardHookPREExecute (Hook: THook; var Hookmsg: THookMsg);
var
Nyckel: Word;
Börja
// Här kan du välja om du vill returnera // nyckelslag till applikationen eller inte
Hookmsg.Result: = IfThen (cbEatKeyStrokes.Checked, 1, 0);
Nyckel: = Hookmsg.WPARAM;
Bildtext: = Char (nyckel);
slutet;
Klar, set, krok :)