![]() |
Nachrichten vollkommen abfangen
Hi,
ist es möglich eine Nachricht, die an eine fremde Anwendung geschickt wird, abzufangen und zu verhindern, dass die Nachricht die Anwendung erreicht? Hintergrund der Frage ist das Problem, dass ich gerne Mousemove-Messages abfangen möchte, da diese zu unliebsamen Neuzeichnungen einiger Controls führt. Zwar habe ich schon versucht die Mousemove-Nachrichten mit einem LLMouseHock abzufangen, jedoch hat dies zur Folge, dass die Maus einfach stehen bleibt. Vielleicht hätte jemand noch einen anderen Vorschlag, wie ich verhindern kann, dass sich einige Controls wegen Highlighting neuzeichnen. Ich arbeite zur Zeit an einem Programm, das direkt auf den Desktop zeichnet. Wird nun ein solcher Highlight aktiv und das Control neugezeichnet, entstehen beim löschen des Gemalten Artefakte (gemalte und gelöscht wird mit dem selben Inverse-Pen). Ich habe auch schon ausprobiert, die Steuerelemnte einfach für den Zeitraum, wo sich die Maus über sie bewegt zu deaktivieren, jedoch bleibt zum einen beispielsweise das Osziloskop von Winamp stehen. Außerdem ist es doch reichlich ärgerlich, wenn das Programm aus irgendwelchen Grünen absürtzen sollte und deaktivierte Controls zurücklässt. Eine andere Idee war ein transparentes Fenster, dass ich über den Bildschirm lege und dann dort drauf zeichne. Jedoch führte dies zu Darstellungsproblemen mit meiner TV-Software und teilweise flackerte der Bildschirm, wenn ich das Fenster wieder versteckte. Vielen Dank im Vorraus greez |
Re: Nachrichten vollkommen abfangen
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Nachrichten vollkommen abfangen
Erstmal vielen Dank für die Antwort. Ich hatte die Hoffnung schon aufgegeben :wink:.
Zitat:
Zitat:
Meiner Meinung nach eine schlechte Lösung, auf die ich leider aus Ermangelung weitere Lösungen zurückgreifen musste :|. Zitat:
Also wäre das Abfangen von Mausklicks außerhalb des Clientbereichs mittels DLL-Injection mit Subclassing (was immer das auch sein mag) möglich? Wenn ja, wie? Und wie ginge es mit Hooks? (Fragen über Fragen :mrgreen:). greez |
Re: Nachrichten vollkommen abfangen
Also was Subclassing ist, erfährst du in den ersten Kapiteln von Luckies Winapi-Tutorials.
Nur erfährst du da halt nicht, wie du deinen Code in den Prozess überhaupt erst reinkriegst ;) |
Re: Nachrichten vollkommen abfangen
Die Zeit is kurz, die Kunst ist lang.
Subclassing würde dir erlauben tatsächlich von einem Fenster die Mausnachrichten verhindern. Allerdings bliebe das Problem, daß dieses "Fenster" ja herausfinden muß, ab wann es wieder Mausnachrichten empfangen darf. Mich würde erst einmal interessieren, was genau du erreichen möchtest, denn dies wäre hier wohl besser. Ich habe noch nicht einmal deinen aktuellen Lösungsansatz komplett deiner Beschreibung entnehmen können. Hingegen zu einer bestimmten Problemstellung kann man eventuell Alternativen finden. |
Re: Nachrichten vollkommen abfangen
Ich weis nicht genau um was es genau geht, aber wenn du das versenden von WindowMessages verhindern willst, könnte dir da ein Globaler API-Hook auf die SendMessageA & SendMessageW funktionen vielleicht weiterhelfen.
Um herauszufinden, wann die Messages abgefangen werden müssen, und wann nicht, könnte man einen Globalen Mutex verwenden. All dies ist eigentlich relativ einfach zu realisieren, mit Hilfe einer Library: MadCodeHook Die MadCodeHook library gibt es unter ![]() ciao, Philipp |
Re: Nachrichten vollkommen abfangen
Zitat:
Und schonmal geguckt wie oft diese APIs so durchschnittlich aufgerufen werden? Da tut jeder zusätzliche CPU-Zyklus weh. Aua. |
Re: Nachrichten vollkommen abfangen
Zitat:
Zitat:
Und, zur Geschwindigkeit: Ein DirectX-Hook (wie er z.B. in Fraps verwendet wird), der vllt. noch die ein oder andere Funktion aufruft, kostet vielleicht 2 Frames (bei ner durchschnittlichen Framerate von 60fps). Und das ist nun wirklich wenig ... und nun sag mir nicht, dass diese SendMessage-Funktionen dauerhaft öfter als 60 mal pro sekunde aufgerufen werden! [edit] Achja, die Entwickler von Detours (ist sowas ähnliches, nur von M$) haben den Zeitunterschied (bei leeren Funktionen) mal nachgemessen: Direktaufruf: 113 ns Mit Detours: 145 ns und das ist sogut wie nichts ... [/edit] ciao, Philipp |
Re: Nachrichten vollkommen abfangen
Zitat:
Zitat:
Zitat:
|
Re: Nachrichten vollkommen abfangen
Zitat:
Zitat:
[edit] Man, warum musst du alles, was ich sage so kritisieren, als ob ich überhaupt keine ahnung hätte? bisher hab ich von dir nur behauptungen gehört, keine beweise. Beweise hab ich ja schon (im gegensatz zu dir) versucht aufzubringen ... Zitat:
Aber ich habe nie behauptet, dass dies die "ultimative lösung" ist, es war nur ein vorschlag. Und welchen weg OrallY hinterher geht, bleibt doch wohl noch ihm überlassen. [/edit] ciao, Philipp |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 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-2025 by Thomas Breitkreuz