Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows Hook - Nachricht manipulieren / verwerfen? (https://www.delphipraxis.net/122940-windows-hook-nachricht-manipulieren-verwerfen.html)

Passi077 24. Okt 2008 15:28


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:

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;
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.

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

Marc. 24. Okt 2008 16:04

Re: Windows Hook - Nachricht manipulieren / verwerfen?
 
Crosspost. Nächste Mal bitte direkt im ersten Post kenntlich machen.

dominikkv 24. Okt 2008 16:10

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;

Passi077 24. Okt 2008 16:34

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:

You should call CallNextHookEx unless you absolutely need to prevent the notification from being seen by other applications.
Bedeutet für mich eigentlich, dass wenn ich die Funktion nicht aufrufe, die Nachricht auch nicht weitergeschickt wird. Ist bei mir allerdings leider nicht der Fall, das Fenster wird trotzdem maximiert.

Boldar 24. Okt 2008 19:38

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.

CorVu5 28. Okt 2008 17:35

Re: Windows Hook - Nachricht manipulieren / verwerfen?
 
Ich glaube, indem man message = WM_NULL setzt.

Cyf 28. Okt 2008 17:57

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.

Passi077 8. Nov 2008 17:49

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?

aladin60 8. Nov 2008 18:08

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 18:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz