Código presentado por Jens Borrisholt. Texto de Zarko Gajic.
Por Jens: Enganches, he visto a muchas personas tratando de hacer una solución limpia para enganchar mensajes en una aplicación. Así que hace algún tiempo decidí implementar ganchos como clase, con buenos eventos y cosas :)
Hook.pas hace posible asignar un puntero de método a un puntero de procedimiento (con ayuda del ensamblador).
Por ejemplo: si desea atrapar TODAS las pulsaciones de teclas en su aplicación, simplemente declare una instancia de TKeyboardHook, asigne un controlador de eventos para OnPreExecute o OnPostExecute, o ambos. Establezca KeyboadHook activo (KeyboardHook.Active: = True) y estará fuera de funcionamiento ...
Un enlace es un punto en el mecanismo de manejo de mensajes del sistema donde una aplicación puede instalar una subrutina para monitorear el tráfico de mensajes en el sistema y procesar ciertos tipos de mensajes antes de que lleguen al procedimiento de ventana de destino.
En pocas palabras, un gancho es una función que puede crear como parte de un dll o su aplicación para monitorear los "sucesos" dentro del sistema operativo Windows.
La idea es escribir una función que se llama cada vez que ocurre un determinado evento en Windows, por ejemplo, cuando un usuario presiona una tecla en el teclado o mueve el mouse.
Para una introducción más profunda a los ganchos, eche un vistazo a Qué son los ganchos de Windows y cómo usarlos dentro de una aplicación Delphi.
El mecanismo de enganche se basa en mensajes de Windows y funciones de devolución de llamada.
Por ejemplo:
Puede usar el gancho WH_KEYBOARD para monitorear la entrada del teclado publicada en una cola de mensajes;
Puede usar el enlace WH_MOUSE para monitorear la entrada del mouse publicada en una cola de mensajes;
Puede realizar un procedimiento de enlace WH_SHELL cuando la aplicación de shell está a punto de activarse y cuando se crea o destruye una ventana de nivel superior.
Descargue la aplicación de demostración hooks.pas +
usa ganchos, ...
var
KeyboardHook: TKeyboardHook;
...
// Procedimiento del controlador de eventos OnCreate de MainForm TMainForm.FormCreate (Remitente: TObject);
empezar
KeyboardHook: = TKeyboardHook.Create;
KeyboardHook.OnPreExecute: = KeyboardHookPREExecute;
KeyboardHook.Active: = True;
final;
// maneja el procedimiento OnPREExecute de KeyboardHook TMainForm.KeyboardHookPREExecute (Hook: THook; var Hookmsg: THookMsg);
var
Clave: Palabra;
empezar
// Aquí puede elegir si desea devolver // el golpe de tecla a la aplicación o no
Hookmsg.Result: = IfThen (cbEatKeyStrokes.Checked, 1, 0);
Clave: = Hookmsg.WPARAM;
Título: = Char (clave);
final;
Listo, listo, gancho :)