![]() |
Windows Hook - Nachricht manipulieren / verwerfen?
Hi,
habe mir einen globalen Hook geschrieben der meine Anwendung immer dann benachrichtigt, wenn ein Fenster maximiert wird:
Delphi-Quellcode:
Das funktioniert soweit auch. Jetzt möchte ich aber verhindern, dass die eigentliche Maximiernachricht das Zielfenster erreicht. D.h. das ein Maximieren des Fensters quasi nicht möglich ist.type tag = record LPARAM :lParam; WPARAM :wParam; message:Cardinal; HWND :hwnd; end; PMsg = ^Tag; const WM_WND_MAX_MESSAGE = WM_APP + 0; function wndmsgHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin case nCode < 0 of FALSE: begin if (PMsg(lparam).wparam = SC_Maximize) then begin SendMessage(WindowHandle,WM_WND_MAX_MESSAGE,0,0); end; end; end; Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); end; In einem Hook Tutorial habe ich gelesen, dass man die Nachrichten auch manipulieren kann. Leider wurde dort nicht aufgezeigt, wie das funktioniert und auch sonst habe ich dazu nichts gefunden :( Vielleicht kann mir ja jemand helfen :) Viele Grüße Pascal |
Re: Windows Hook - Nachricht manipulieren / verwerfen?
![]() |
Re: Windows Hook - Nachricht manipulieren / verwerfen?
ich kenn mich da auch nicht so aus, aber probiers vllt mal so:
Delphi-Quellcode:
function wndmsgHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var handled: Boolean; begin handled := False; case nCode < 0 of FALSE: begin if (PMsg(lparam).wparam = SC_Maximize) then begin handled := True; SendMessage(WindowHandle,WM_WND_MAX_MESSAGE,0,0); end; end; end; if handled then Result := 1 else Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); end; |
Re: Windows Hook - Nachricht manipulieren / verwerfen?
Danke für die Antwort!
Dachte eigentlich auch, dass es mit der CallNextHookEx Funktion zu zun hat. Laut MSDN: Zitat:
|
Re: Windows Hook - Nachricht manipulieren / verwerfen?
Das ist unsinn.
Die function callnexthookex ruft den nächsten hook auf. D.h. alle anderen Hooks sind dann lahmgelegt. |
Re: Windows Hook - Nachricht manipulieren / verwerfen?
Ich glaube, indem man message = WM_NULL setzt.
|
Re: Windows Hook - Nachricht manipulieren / verwerfen?
Ist schon länger her, aber ich meine, damit die Message nicht an den (eigentlichen) Empfänger weitergeleitet wird, muss Result 0 sein, wobei dies unabhängig vom Aufruf des nächsten Hooks ist.
|
Re: Windows Hook - Nachricht manipulieren / verwerfen?
Hi,
vielen Dank für Eure Antworten. Result := 0; setzen, unabhängig vom nächsten Hook-Aufruf hat leider nichts gebracht. Wie ich die gesamte Message := WM_NULL setzen kann, habe ich leider nicht herausgefunden. Ich kriege doch nur lParam und wParam, und die nichtmal als Call by Reference. Wie würde das gehen? Dann habe ich leider noch ein weiteres Problem mit dem Hook: Er reagiert nicht, wenn man ein Fenster mit Doppelklick auf die Titelleiste maximiert. Außerdem funktioniert er mit manchen Anwendungen nicht. Er funktioniert z.B. mit: Opera, Firefox, eigenen Delphi Programmen Aber nicht mit: Notepad, Explorer, Trillian Fenstern.. Weiß jemand woran das noch liegt? Gibt es noch andere Messages außer SC_MAXIMIZE, die ich abfangen muss? |
Re: Windows Hook - Nachricht manipulieren / verwerfen?
Liste alle Parameter. Dann weißt Du, welche Dich noch interessieren...
Bernd. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz