Frage

Wie kann ich die Adresse einer WndProc (ein Fenster von ein anderen Prozess ) finden. Auch wenn ich spritze eine DLL und versuchen Sie es mit beiden GetClassInfoEx zu finden () oder GetWindowLong () oder GetWindowLongPtr () Ich habe immer Werte erhalten wie 0xffff08ed, die auf jeden Fall nicht um eine ausführbare Adresse ist. Es ist nach MSDN: „... die Adresse des Fensterprozedur, oder ein Griff, die die Adresse der Fensterprozedur“

Leider ist das nicht gut genug für mich mich die tatsächliche Adresse. Spy ++ macht den Job richtig die meiste Zeit (aber auch, dass manchmal nicht). So soll es möglich sein, sein. Thanx.


[EDIT:] Ein großes Lob an Chris Becke eine super schnell für die Bereitstellung und richtige Lösung mein kleines Problem!

War es hilfreich?

Lösung

Vielleicht werden Sie zunichte gemacht, weil Sie für die falsche Version des WindowProc fragen.

Fenster Procs, wie Anwendungen, tritt in zwei Geschmacksrichtungen: ansi und Unicode. Windows kann nicht einen rohen Zeiger auf ein ansi Fenster in einer Unicode-Anwendung zurückzukehren, oder umgekehrt, wie sie es mit dem falschen String-Typ zu nennen versucht.

So gibt es keine GetWindowLongPtr Funktion. Es ist ein Makro, dass Entschlüsse zu zwei ‚echten‘ Funktionen des Windows-API bietet: GetWindowLongPtrA und GetWindowLongPtrW. Wenn das Fenster ein Unicode-Fenster, und GetWindowLongPtrA wird Fenster zurückkehren, einen Griff anstelle des Rohzeiger genannt, so dass es Anrufe abfangen (hergestellt über CallWindowProc) und Marschall die Zeichenfolge des von ansi zu Unicode. Die entgegengesetzte Umwandlung hält die andere Richtung.

Auch wenn Sie die richtige Funktion aufrufen, könnten Sie noch einen Griff zurück - seine durchaus möglich, dass ansi Code ein Unicode-Fenster subclassed hat. so der WindowProc wurde von einem der CallWindowProc Griffen vollständig ersetzt.

In diesem Fall -. Pech Ich denke,

Andere Tipps

Um Chris Becke Antwort zu verlängern (was mein Problem gelöst, danke!):

  

So gibt es keine GetWindowLongPtr Funktion. Es ist ein Makro, dass Entschlüsse zu zwei ‚echten‘ Funktionen des Windows-API bietet: GetWindowLongPtrA und GetWindowLongPtrW. Wenn das Fenster ein Unicode-Fenster, und GetWindowLongPtrA wird Fenster zurückkehren, einen Griff anstelle des Rohzeiger genannt, so dass es Anrufe abfangen (hergestellt über CallWindowProc) und Marschall die Zeichenfolge des von ansi zu Unicode. Die entgegengesetzte Umwandlung hält die andere Richtung.

Sie können prüfen, ob das Fenster in Frage eine Unicode oder ANSI-Fenster ist durch den Aufruf der IsWindowUnicode Funktion. Mit Hilfe dieser Informationen, welche GetWindowLongPtr Funktion Bedürfnisse genannt werden (zur Laufzeit) bestimmen können,

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