AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Windows Hook - Nachricht manipulieren / verwerfen?
Thema durchsuchen
Ansicht
Themen-Optionen

Windows Hook - Nachricht manipulieren / verwerfen?

Ein Thema von Passi077 · begonnen am 24. Okt 2008 · letzter Beitrag vom 8. Nov 2008
Antwort Antwort
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#1

Windows Hook - Nachricht manipulieren / verwerfen?

  Alt 24. Okt 2008, 15:28
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
  Mit Zitat antworten Zitat
Benutzerbild von Marc.
Marc.

Registriert seit: 14. Mär 2008
Ort: Aachen
22 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Windows Hook - Nachricht manipulieren / verwerfen?

  Alt 24. Okt 2008, 16:04
Crosspost. Nächste Mal bitte direkt im ersten Post kenntlich machen.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Windows Hook - Nachricht manipulieren / verwerfen?

  Alt 24. Okt 2008, 16:10
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;
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#4

Re: Windows Hook - Nachricht manipulieren / verwerfen?

  Alt 24. Okt 2008, 16:34
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.
  Mit Zitat antworten Zitat
Boldar

Registriert seit: 20. Aug 2008
Ort: Paderborn
6 Beiträge
 
#5

Re: Windows Hook - Nachricht manipulieren / verwerfen?

  Alt 24. Okt 2008, 19:38
Das ist unsinn.
Die function callnexthookex ruft den nächsten hook auf.
D.h. alle anderen Hooks sind dann lahmgelegt.
  Mit Zitat antworten Zitat
CorVu5

Registriert seit: 31. Dez 2007
26 Beiträge
 
Delphi 7 Professional
 
#6

Re: Windows Hook - Nachricht manipulieren / verwerfen?

  Alt 28. Okt 2008, 17:35
Ich glaube, indem man message = WM_NULL setzt.
Das Leben ist wie ein Strand...und dann stirbt man.
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#7

Re: Windows Hook - Nachricht manipulieren / verwerfen?

  Alt 28. Okt 2008, 17:57
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.
  Mit Zitat antworten Zitat
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#8

Re: Windows Hook - Nachricht manipulieren / verwerfen?

  Alt 8. Nov 2008, 17:49
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?
  Mit Zitat antworten Zitat
aladin60

Registriert seit: 12. Mär 2008
Ort: Sachsen-Anhalt
45 Beiträge
 
Delphi 2006 Personal
 
#9

Re: Windows Hook - Nachricht manipulieren / verwerfen?

  Alt 8. Nov 2008, 18:08
Liste alle Parameter. Dann weißt Du, welche Dich noch interessieren...

Bernd.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 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