Als ob ich's gewusst hätte
Die
DLL compiliert aber richtig, oder?
Dann weiter so in deinem Hauptprogramm:
Delphi-Quellcode:
// das hatten wir schon
type
TMessageHookCallback = procedure(const Msg: Windows.TMsg) of object;
procedure DisableMessageHook; stdcall; external 'SuperMsgHook.dll';
procedure EnableMessageHook(ACallbackProc: TMessageHookCallback); stdcall; external 'SuperMsgHook.dll';
// Ab jetzt neu, Methode von Form1, also von deinem Hauptformular.
// Kann aber auch eine Methode einer beliebigen Klasse sein
procedure Form1.OnMessageHook(const Msg: Windows.TMsg);
begin
// Hier stehen jetzt in Msg alle Parameter der Meldung
// Msg.hwnd: HWND; das Fensterhandle
// Msg.message: UINT; WM_WINDOWPOSCHANGING
// Msg.wParam: WPARAM; wParam zu der Meldung
// Msg.lParam: LPARAM; lParam zu der Meldung
// Msg.time: DWORD; Zeitpunkt der Nachricht
// Msg.pt: TPoint; Mauszeigerstelle zum ang. Zeitpunkt
end;
procedure Form1.FormShow(Sender: TObject);
begin
// Hier wird der Hook eingeschaltet
EnableMessageHook(OnMessageHook);
end;
procedure Form1.FormHide(Sender: TObject);
begin
// ... und hier wieder ausgeschaltet
DisableMessageHook;
end;
In OnMessageHook kannst du jetzt die Nachrichten verarbeiten. Du solltest allerdings nicht zu viel machen, da es sonst auf die Performance geht.