Frage

Ist verwende diese:

SetWindowsHookEx(WH_CALLWNDPROC, ...);

kann ich die Nachrichten sehe ich verarbeiten wollen, aber ich möchte erreichen das Zielfenster jene Botschaft zu verhindern. Also habe ich versucht diese:

SetWindowsHookEx(WH_GETMESSAGE, ...);

Wenn ich das ich die Nachricht ändern kann, und verhindern, dass das Zielfenster es aus der Verarbeitung, aber dieser Haken sieht nicht die Nachrichten, die ich brauche zu verarbeiten. Ich nehme an, dies liegt daran, dass es in das Zielfenster der Warteschlange geschrieben wird, nicht gesendet? Gibt es eine Möglichkeit, um dieses Problem? Ich habe gehört, dass Fenster Unter classing dies zu erreichen, könnte der Lage sein, aber kann ich ein Fenster in einem anderen Prozess eine Unterklasse? Gibt es eine Möglichkeit, dies mit Haken zu tun?

War es hilfreich?

Lösung

Sie können ein Fenster in einem anderen Prozess eine Unterklasse, aber der Haken DLL sollte. WH_GETMESSAGE und WH_CALLWNDPROC in das Fenster, das Sie interessiert sind, Unterklasse Haken im Rahmen des Prozesses ausgeführt werden können die die Nachricht empfängt, so dass bei Punkt, den Sie haben einen „in“ das Ziel der Fenster zu Unterklasse.

Andere Tipps

Sie könnten versuchen, Subklassifizieren das Ziel Fenster und dann die Nachrichten filtern.

Der Haken Dokumentation schlägt vor, dies nicht getan werden kann, aber ich nehme diese Strategie funktionieren könnte: verwenden SetWindowsHookEx (WH_CALLWNDPROC, ...)

In dem Verfahren ändern Sie einfach die Nachricht, die Sie weg zu einem nicht verwendeten WM_ Wert werfen wollen.

LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
   CWPSTRUCT *C=(CWPSTRUCT *)lParam;

   if ( ...we are interested in this one) {
     ..deal with this message here...
     //Modify the message so that the client will ignore it
     C->message=WM_USER+44; //presumably ignored by client
   }       
   return GetNextHook(...);
}

Nasty aber einfach?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top