Code eingereicht von Jens Borrisholt. Text von Zarko Gajic.
Von Jens: Ich habe viele Leute gesehen, die versucht haben, eine saubere Lösung für das Einbinden von Nachrichten in eine Anwendung zu finden. Also habe ich mich vor einiger Zeit entschlossen, Hooks als Klasse zu implementieren, mit schönen Events und so :)
Hook.pas ermöglicht es, einem Prozedurzeiger einen Methodenzeiger zuzuweisen (mit etwas Hilfe von Assembler).
Beispiel: Wenn Sie ALLE Tastenanschläge in Ihrer Anwendung abfangen möchten, deklarieren Sie einfach eine Instanz von TKeyboardHook, weisen Sie einen Ereignishandler für OnPreExecute oder OnPostExecute oder beides zu. Aktivieren Sie KeyboadHook (KeyboardHook.Active: = True) und Sie sind unterwegs…
Ein Hook ist ein Punkt im Mechanismus zur Verarbeitung von Systemnachrichten, an dem eine Anwendung eine Unterroutine installieren kann, um den Nachrichtenverkehr im System zu überwachen und bestimmte Nachrichtentypen zu verarbeiten, bevor sie die Zielfensterprozedur erreichen.
Kurz gesagt, ein Hook ist eine Funktion, die Sie als Teil einer DLL oder Ihrer Anwendung erstellen können, um die Vorgänge im Windows-Betriebssystem zu überwachen.
Die Idee ist, eine Funktion zu schreiben, die jedes Mal aufgerufen wird, wenn ein bestimmtes Ereignis in Windows auftritt - zum Beispiel, wenn ein Benutzer eine Taste auf der Tastatur drückt oder die Maus bewegt.
Eine ausführlichere Einführung in Hooks finden Sie unter Was sind Windows-Hooks und wie werden sie in einer Delphi-Anwendung verwendet ?..
Der Hooking-Mechanismus basiert auf Windows-Nachrichten und Rückruffunktionen.
Beispielsweise:
Mit dem WH_KEYBOARD-Hook können Sie Tastatureingaben überwachen, die in eine Nachrichtenwarteschlange gestellt wurden.
Sie können den WH_MOUSE-Hook verwenden, um Mauseingaben zu überwachen, die in eine Nachrichtenwarteschlange gestellt wurden.
Sie können eine WH_SHELL-Hook-Prozedur ausführen, wenn die Shell-Anwendung aktiviert werden soll und wenn ein Fenster der obersten Ebene erstellt oder zerstört wird.
Laden Sie die Anwendung hooks.pas + demo herunter
benutzt Haken,…
var
KeyboardHook: TKeyboardHook;
…
// MainForms OnCreate-Ereignisbehandlungsprozedur TMainForm.FormCreate (Sender: TObject);
Start
KeyboardHook: = TKeyboardHook.Create;
KeyboardHook.OnPreExecute: = KeyboardHookPREExecute;
KeyboardHook.Active: = True;
Ende;
// behandelt die OnPREExecute-Prozedur von KeyboardHook TMainForm.KeyboardHookPREExecute (Hook: THook; var Hookmsg: THookMsg);
var
Stichwort;
Start
// Hier können Sie wählen, ob Sie den // Tastendruck an die Anwendung zurückgeben möchten oder nicht
Hookmsg.Result: = IfThen (cbEatKeyStrokes.Checked, 1, 0);
Key: = Hookmsg.WPARAM;
Beschriftung: = Char (Schlüssel);
Ende;
Fertig, fertig, Haken :)