Hallo zusammen,
und zwar versuche ich schon seit geraumer Zeit einen Anwendungs-globalen Hook für die Windows-Botschaften
WM_WINDOWPOSCHANGING oder
WM_WINDOWPOSCHANGED zu implementieren. Ziel ist es, die Bewegung eines beliebigen anderen Fenster festzustellen und darauf zu reagieren. Ich habe mich ein wenig eingelesen, da ich nicht all zu viel Ahnung von Hooks hatte, bis ich nun alles zum Laufen gebracht habe
Folgenden Code habe ich im Moment:
Delphi-Quellcode:
// Hook registrieren, aber welche WH_xxx soll ich nehmen?
FHookHandle := SetWindowsHookEx(WH_MAX, FHookMethodPointer, 0, GetCurrentThreadId());
{ ... }
function TMyClass.HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LResult; stdcall;
var
P: PEventMsg;
begin
case nCode < HC_ACTION of
True:
Result := CallNextHookEx(FHookHandle, nCode, wParam, lParam);
else
if (lParam <> 0) then
begin
//
// Diesen Code habe ich wo gefunden, er funktioniert aber nicht wirklich,
// da nie was ins Memo geschrieben wird. :-/
//
P := PEventMsg(lParam);
if (P.message = WM_WINDOWPOSCHANGED) or (P.message = WM_WINDOWPOSCHANGING) then
Memo1.Lines.Add('blub');
end;
Result := CallNextHookEx(FHookHandle, nCode, wParam, lParam);
end;
end;
Ich habe die interessanten Stellen im Code markiert. Zum einen handelt es sich um den Aufruf von
SetWindowsHookEx, bei dem ich nicht genau weiß, mit welchem ersten Parameter ich diesen nutzen soll. Ich will eben nur die oben genannten Messages abfangen.
Des weiteren will ich in der Hook-Nachrichtenschleife genau diese Messages abfangen und komme aber nicht wirklich zum Ziel. Ich hoffe, ihr könnt mir hier weiterhelfen!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)