Code soumis par Jens Borrisholt. Texte de Zarko Gajic.
Par Jens: Hooks, j'ai vu beaucoup de gens essayer de faire une solution propre pour accrocher des messages dans une application. J'ai donc décidé il y a quelque temps d'implémenter des hooks en tant que classe, avec de beaux événements et d'autres choses :)
Hook.pas permet d'affecter un pointeur de méthode à un pointeur de procédure (avec l'aide de l'assembleur).
Par exemple: si vous souhaitez intercepter TOUTES les frappes dans votre application - déclarez simplement une instance de TKeyboardHook, affectez un gestionnaire d'événements pour OnPreExecute ou OnPostExecute, ou les deux. Définissez-vous KeyboadHook actif (KeyboardHook.Active: = True) et vous êtes en cours d'exécution…
Un hook est un point du mécanisme de gestion des messages du système où une application peut installer un sous-programme pour surveiller le trafic des messages dans le système et traiter certains types de messages avant qu'ils n'atteignent la procédure de la fenêtre cible.
En bref, un hook est une fonction que vous pouvez créer dans le cadre d'une DLL ou de votre application pour surveiller les `` événements '' dans le système d'exploitation Windows.
L'idée est d'écrire une fonction qui est appelée à chaque fois qu'un certain événement dans Windows se produit - par exemple lorsqu'un utilisateur appuie sur une touche du clavier ou déplace la souris.
Pour une introduction plus approfondie aux hooks, regardez ce que sont les hooks Windows et comment les utiliser dans une application Delphi.
Le mécanisme de raccordement repose sur les messages Windows et les fonctions de rappel.
Par exemple:
Vous pouvez utiliser le crochet WH_KEYBOARD pour surveiller l'entrée du clavier publiée dans une file d'attente de messages;
Vous pouvez utiliser le hook WH_MOUSE pour surveiller l'entrée de la souris publiée dans une file d'attente de messages;
Vous pouvez une procédure de hook WH_SHELL lorsque l'application shell est sur le point d'être activée et lorsqu'une fenêtre de niveau supérieur est créée ou détruite.
Télécharger l'application hooks.pas + démo
utilise des crochets,…
var
KeyboardHook: TKeyboardHook;
…
// Gestionnaire d'événement OnCreate de MainForm TMainForm.FormCreate (Sender: TObject);
commencer
KeyboardHook: = TKeyboardHook.Create;
KeyboardHook.OnPreExecute: = KeyboardHookPREExecute;
KeyboardHook.Active: = True;
fin;
// gère OnPREExecuteprocedure TMainForm.KeyboardHookPREExecute de KeyboardHook (Hook: THook; var Hookmsg: THookMsg);
var
Mot-clé;
commencer
// Ici, vous pouvez choisir si vous souhaitez retourner // le coup de clé à l'application ou non
Hookmsg.Result: = IfThen (cbEatKeyStrokes.Checked, 1, 0);
Clé: = Hookmsg.WPARAM;
Légende: = Char (clé);
fin;
Prêt, prêt, accroché :)