Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Nachrichten vollkommen abfangen (https://www.delphipraxis.net/41987-nachrichten-vollkommen-abfangen.html)

Mephistopheles 28. Mär 2005 13:44

Re: Nachrichten vollkommen abfangen
 
Subclassing ist nichts anderes, als daß du für (jeweils) ein bestimmtes Fenster die Fensterfunktion durch eine eigene austauscht und so wahlweise vor der Bearbeitung durch die alte Fensterfunktion oder danach deine Bearbeitung vornimmst. Alternativ kannst du natürlich auch einfach die orginale Fensterfunktion nicht mehr aufrufen, wodurch die Mausnachrichten z.B. abgefangen werden können.

Das Gegenteil davon ist Superclassing, wo die Fensterfunktion einer kompletten Fensterklasse ausgetauscht wird.

Für DLL-Injection gibt es dutzende Methoden. Die leichteste ist auf NT-basierten Systemen in einem ganz bestimmten Schlüssel den Namen deiner DLL abzulegen. Damit wird deine DLL in jeden gestarteten Prozess geladen.

OrallY 28. Mär 2005 17:16

Re: Nachrichten vollkommen abfangen
 
Nach einigem rumstöbern im Inet und im PSDK bin ich wieder auf den GetMsg-Hook gestoßen. Und was sehen meine entzückten Äuglein in er Beschreibung? "...or modify the message...". Bingo!

Tritt irgendwo eine WM_RBUTTONDOWN-Nachricht auf, setzt der Hook sie auf WM_NULL. Funktioniert fast alles wunderbar, bis auf eine ziemlich nervende Tatsache:

Drückt man irgendwo die rechte Maustaste wird das darunterliegende Fenster trotz Hook aktiviert. Die Nachrichten werden erfolgreich geblockt. Jedoch erhält das Fenster, wenn es nicht aktiv ist und mit rechts ein Klick darauf erfolgt die Nachricht (dezimal) 45056 und beim Verlust des Fokuses 45057.
Diese Nachrichten scheinen nicht durch den Hook zu gehen und können daher auch nicht blockiert werden. Ich denke aber, dass sie irgendwas damit zu tun haben.

Interessanterweise zeigt ein Fenster keine Reaktion, wenn ich eine solche Nachricht schicke. :?

Was sind das für Nachrichten? $B000=45056 ist niergends aufgelistet :gruebel:.

greez

Edit: Habe gerade eine Fund gemacht: http://groups.google.de/groups?hl=de...enetserver.com

45056 scheint eine VCL-Interne Nachricht zu sein (CM_ACTIVATE). Dann hat das wohl nichts mit dem Problem zu tun :|.

Mephistopheles 28. Mär 2005 19:39

Re: Nachrichten vollkommen abfangen
 
Es könnte einerseits schon mit dem Problem zu tun haben, andererseits wäre das aber nur auf VCL-Programme anwendbar. Bei anderen dürfte das Problem ja dann nicht auftauchen, oder?

OrallY 29. Mär 2005 22:32

Re: Nachrichten vollkommen abfangen
 
Zitat:

Zitat von Mephistopheles
Es könnte einerseits schon mit dem Problem zu tun haben, andererseits wäre das aber nur auf VCL-Programme anwendbar. Bei anderen dürfte das Problem ja dann nicht auftauchen, oder?

Doch, dieses Problem tritt leider bei allen Anwendungen auf. Dem Anschein nach, ist es einfach nur eine VCL-interne Control-Message die irgendwas in den unendlichen Weiten der VCL bewirkt.

Vermutlich wertet das OS die Mausnachrichten noch vor meinem GetMsg-Hook aus und setzt dann gegebenenfalls Fenster aktiv, bevor dies mein Hook hätte verhindern können :|. Ein LowLevel-MH scheint vor dieser Auswertung zu sitzen :gruebel:. Dort jedoch habe ich keinerlei Möglichkeiten die Nachrichten zu manipulieren, außer die Hook-Chain zu unterbrechen.

Momentan bin ich mit meinem Latein ziemlich am Ende. Es muss jedoch irgendwie funktionieren, da ich ein Programm kenne, das genau dies macht. Die Entwickler scheinen allerdings nicht besonders Kommunikativ zu sein, wenn es um ihren Source geht...

Bin für alle Idee nach wie vor offen :wink:.

greez

Mephistopheles 30. Mär 2005 07:43

Re: Nachrichten vollkommen abfangen
 
Zitat:

Zitat von OrallY
Momentan bin ich mit meinem Latein ziemlich am Ende. Es muss jedoch irgendwie funktionieren, da ich ein Programm kenne, das genau dies macht. Die Entwickler scheinen allerdings nicht besonders Kommunikativ zu sein, wenn es um ihren Source geht...

Bin für alle Idee nach wie vor offen :wink:.

Ich habe aktuell keine Ideen mehr.

OrallY 30. Mär 2005 21:53

Re: Nachrichten vollkommen abfangen
 
Der o.g. Entwickler hat sich nun doch noch gemeldet.
Er hat das Problem ebenfalls mit Unterbrechen der HookChain gelöst (Ist bei näherer Betrachtung eigentlich das Naheliegendste, da dies ja eigentlich genau die Absicht ist, die das Programm verfolgt: Das Durchstellen von Mausnachrichten verhindern.). Allerdings habe ich festgestellt, dass ein LL-Mousehook doch nicht notwendig ist, um die Hook-Chain zu unterbrechen! Ein einfacher Mousehook reicht durchaus :wall: :mrgreen:. Und dank dem Tipp von Mephistopheles (SetCapture) ist nun auch das Highlighting kein Problem mehr.

Vielen Dank an alle die mir geholfen haben!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 Uhr.
Seite 3 von 3     123   

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-2025 by Thomas Breitkreuz