Nimm eine
GUID und du bist auf der sicheren Seite.
Ich würde noch prüfen, ob RegisterShellHookWindow nicht fehl geschlagen ist.
Danke. Mit
GUID bin ich einverstanden.
Müsste denn ein optimierter Code nicht in etwa so aussehen?
Delphi-Quellcode:
procedure TMainForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if shellHookWindowRegisteredSuccessfully
then
DeregisterShellHookWindow(
Handle);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
ShellHookMessage := RegisterWindowMessageA(myGUID);
if ShellHookMessage <> 0
then
shellHookWindowRegisteredSuccessfully := RegisterShellHookWindow(
Handle);
if not shellHookWindowRegisteredSuccessfully
then
MachIrgendeineFehlerbehandlung;
end;
Ansonsten, wenn RegisterShellHookWindow fehlschlägt, dann findet ja schlichtweg das WndProc mit
Message.Msg = ShellHookMessage
nicht statt. MachIrgendeineFehlerbehandlung dient dann nur dazu, den Anwender gezielt zu informieren.
Eine generelle Frage, vermutlich einen eigenen Thread wert: man findet x Beispiele, welche die Funktionsergebnisse von
API-Aufrufen nicht auswerten. Was ist besser: trotzdem auswerten und das Programm mit Fehlerauswertungen aufblähen oder doch auch ab und zu das Ignorieren von Funktionsergebnissen zulassen? Klar ist, dass das erstere das sicherere Verfahren ist.
Er wollte so richtig in Delphi einsteigen. Nun steckt er ganz tief drin ...