SPY-Tool

Zurück Zum Inhaltsverzeichnis Weiter

Nun steigen wir jetzt wie erwähnt in die Praxis ein. Aber keine Angst, Sie müssen (jetzt) noch nicht gleich Ihr erstes WINDOWS-Programm schreiben. Was wir uns ansehen wollen ist das Tool SPY.

Mit Hilfe von SPY können die Nachrichten eines bestimmten Fensters aufgezeichnet werden. Sie haben dabei sogar die Möglichkeit, je nach eingestellter Option, nur bestimmte Nachrichten oder Nachrichtengruppen aufzeichnen zu lassen. Diese Nachrichten werden dann, soweit möglich und in den Optionen eingestellt, in dekodierter Form dargestellt, d.h. mit ihrem symbolischen Namen. Außerdem werden die Zusatzinformationen (wParam und lParam der Nachricht), soweit relevant und in den Optionen aktiviert, ebenfalls dekodiert.

Starten Sie nun das Tool SPY++. Sie finden es im Startmenü des Visual Studios unter Dienstprogramme. Nach dem Starten des Programms sollten Sie ein Fenster mit etwa folgendem Inhalt sehen. Je nach gestarteten Anwendungen wird der tatsächliche Inhalt mehr oder weniger abweichen, was uns aber im Augenblick nicht stören soll.

Das SPY Startfenster

Das angezeigte Fenster stellt eine Übersicht über alle im System vorhandenen Fenster dar, und dies unabhängig davon, ob das jeweilige Fenster im Augenblick sichtbar ist oder nicht. Ganz links im Ausgabefenster sehen Sie Fensterhierarchie in Form eines Fensterbaumes. Das allen Fenstern übergeordnete Fenster ist der Desktop. Dem Desktop untergeordnet sind die einzelnen Hauptfenster der gestarteten Anwendungen. Diese Hauptfenster können wiederum untergeordnete Fenster besitzen, was durch ein 'Plus'-Zeichen im Fensterbaum angezeigt wird. Wenn Sie auf eines der 'Plus'-Zeichen klicken wird die darunter liegende Fensterebene geöffnet.

In der nächsten Spalte folgen die Fenster-Handle und danach die Fenstertitel. Beachten Sie in dem obigen Bild, dass viele der Fenster keinen Titel besitzen. Lediglich die letzten beiden Fenster besitzen einen Fenstertitel. Den Abschluss bilden die Namen der Fensterklassen, zu denen die jeweiligen Fenster gehören. Was Fensterklassen sind und welchem Zweck sie dienen erfahren Sie im nächsten Kapitel.

Mit diesem Wissen können wir den in der obigen Abbildung hervorgehobenen, blau unterlegten, Eintrag wie folgt interpretieren: Das Fenster besitzt keine weiteren untergeordneten Fenster (kein 'Plus'-Zeichen vorhanden), besitzt das Fenster-Handle 0x2BC und hat den Fenstertitel "Uhrzeit: 11:20:24". Außerdem gehört das Fenster der Fensterklasse "Afx:4000000:...." an.

Um nun das Fenster auszuwählen, dessen Nachrichten aufgezeichnet werden sollen, stehen verschiedene Wege zur Verfügung. Wir werden dazu das im SPY integrierte Suchwerkzeug verwenden.

Klicken Sie in der Symbolleiste des SPY das Symbol Symbol für Fensterauswahl (4. Symbol im Toolbar) an. Daraufhin wird der nachfolgende Dialog dargestellt. Ziehen Sie dann das Suchwerkzeug (das ist das rot eingekreiste Symbol) mit gedrückter linker Maustaste über das Fenster, dessen Nachrichten Sie aufzeichnen wollen. Das Fenster erhält einen hervorgehobenen Rahmen. Sobald Sie die Maustaste jetzt loslassen, werden die Daten des Fensters im Dialog dargestellt. Aber klicken Sie danach noch nicht den OK-Button an!

Die Fensterauswahl

Über weitere Optionen können Sie anschließend noch einstellen, für welche weiteren Fenster, die in irgendeiner Abhängigkeit zum ausgewählten Fenster stehen, zusätzlich Nachrichten aufgezeichnet werden sollen.  Im Regelfall werden Sie die Default-Einstellung unverändert übernehmen, d.h. es werden nur die Nachrichten des ausgewählten Fensters aufgezeichnet.

Doch das ist noch nicht alles was Ihnen SPY bietet. Sie können ebenfalls nur bestimmte Nachrichten oder Nachrichtengruppen aufzeichnen lassen. Diese Option ist immer dann besonders hilfreich, wenn Sie sich z.B. nur die Tastatur-Nachrichten ansehen wollen.

Klicken Sie dazu einmal auf den Tabulator mit der Bezeichnung Nachrichten um den nachfolgenden Dialog darzustellen. Links im Feld Anzuzeigende Nachrichten können einzelne Nachrichten für die Aufzeichnung auswählen. Im Feld Nachrichtengruppen hingegen wählen Sie ganze Nachrichtengruppen, wie z.B. Maus- oder Tastaturnachrichten, für die Aufzeichnung aus. Standardmäßig werden alle Nachrichten eines Fensters aufgezeichnet.

Die Nachrichtenauswahl.

Wenn Sie nun den Dialog mittels OK-Button schließen beginnt die Nachrichtenaufzeichnung für die eingestellten Nachrichten. Tun Sie aber jetzt noch nicht! Wir werden nachher gleich an Hand eines vorgegebenen Programms das Ganze noch üben.

Die aufgezeichneten Nachrichten

Die können die Aufzeichnung der Nachrichten jederzeit durch anklicken der Symbole Aufzeichnung anhalten und Aufzeichnung starten im Toolbar anhalten und wieder starten.

Die erste Spalte der Aufzeichnung enthält einen laufenden Index für die aufgezeichneten Nachrichten. Danach kommt das Fenster-Handle des Fensters, dessen Nachrichten aufgezeichnet wurde. Die dritte Spalte enthält die Kennung für die API-Funktion, mit der die Nachricht an das Fenster abgesandt wurde. Ein 'S' bedeutet, dass die Nachricht an das Fenster mit der API-Funktion SendMessage(...) gesendet wurde. Steht ein 'P' als Kennung so bedeutet dies, dass die entsprechende Nachricht mit der API-Funktion PostMessage(...) an das Fenster gesendet wurde. Ich hoffe Sie wissen noch den kleinen aber feinen Unterschied zwischen den beiden Funktionen. Wenn nicht, sehen Sie nochmals in der Lektion Nachrichtenbearbeitung nach. Die Kennung 'R' gibt schließlich den Returnwert der Nachricht an. Die nächste Spalte enthält die eigentliche Nachricht in symbolischer Form, gefolgt von den dekodierten Zusatzinformationen WPARM und LPARAM zur Nachricht.

Versuchen wir jetzt die obige Nachrichtenaufzeichnung ab dem Nachrichtenindex <00031> zu interpretieren. Irgendwann erhielt das Fenster mit dem Fenster-Handle 0x644 eine Nachricht vom Typ WM_TIMER von einem Timer mit der ID 1. Timer und Timer-IDs werden später noch erklärt. Für diesen Timer wurde keine eigene Timer-Funktion spezifiziert (tmprc: 00000000). Als Reaktion darauf wird eine Nachricht WM_SETTEXT an das Fenster gesendet. Die Zusatzinformation zu dieser Nachricht enthält einen Zeiger auf den als Fenstertitel zu setzenden Text, im Beispiel ist dies die Uhrzeit. Intern wird als Reaktion auf die WM_SETTEXT Nachricht eine weitere Nachricht WM_GETTEXT an das Fenster gesendet. Die beiden nachfolgenden Einträge (die mit der Kennung 'R') zeigen an, dass die entsprechenden Nachrichten durch die Anwendung verarbeitet wurden.

Stören Sie sich nicht am dem Rückgabewert der Nachricht <00035>. Obwohl dort als Rückgabewert fSucceedded:False steht wurde die Nachricht richtig bearbeitet. Dieser Rückgabewert rührt daher, dass Fensterprozeduren in der Regel den Wert '0' zurückgeben wenn Sie eine Nachricht bearbeitet haben. Und '0' ist als False definiert. Was Fensterprozeduren sind erfahren Sie im nächsten Kapitel.

Wenn Sie nun das nachfolgende Bild anklicken können Sie sich an Hand einer kleinen Demonstration nochmals ansehen, wie das Tool SPY bedient wird.

Demo starten

Zur Demonstration der Aufzeichnung von Nachrichten mittels SPY starten Sie jetzt einmal das Programm '01Einführung\SpyTool\WinTimer.exe'. Dieses Programm gibt die aktuelle Uhrzeit im Fenstertitel aus. Um die Uhrzeit zu aktualisieren wird intern ein Timer verwendet der das Programm durch eine WM_TIMER Nachricht im Sekundentakt aufweckt. Das Programm selbst wird später bei der Behandlung von Timern erklärt. Nachfolgend sehen Sie das Fenster des Programms.

wintimer.gif (2065 Byte)

Falls Sie es noch nicht getan haben, starten Sie jetzt das Tool SPY. Klicken Sie anschließend das Symbol  Symbol für Fensterauswahl  an ziehen Sie dann das Suchwerkzeug des Dialogs auf das Fenster der Anwendung. Klicken Sie den OK-Button des Dialogs an und die Nachrichtenaufzeichnung beginnt.

Sie sollten jetzt etwa im Sekundentakt eine Nachricht vom Typ WM_TIMER sehen. Als Reaktion auf diese Nachricht versendet das Programm dann eine WM_SETTEXT Nachricht, die als Zusatzinformation einen Zeiger auf den neuen Fenstertitel enthält.

Spielen Sie ein klein wenig mit dem Fenster. Verändern Sie einmal die Fenstergröße. Sie werden dabei eine Unmenge von Nachrichten sehen, so u.a. auch eine Nachricht vom Typ WM_GETMINMAXINFO und WM_SIZE. Diese Nachrichten teilen dem Fenster mit, dass es in seiner Größe verändert werden soll bzw. verändert wurde. Durch Verarbeiten der WM_GETMINMAXINFO Nachricht können Sie z.B. die minimale und maximale Größe eines Fenster bestimmen (was wir in einem späteren Beispiel auch tun werden). WM_SIZE teilt dem Fenster mit, dass es in seiner Größe verändert wurde und damit je nach Anwendungsfall seinen Inhalt neu zeichnen muss.

Als nächstes deaktivieren und aktivieren Sie einmal das Fenster. Hierbei sollten die beiden Nachrichten WM_KILLFOCUS und WM_SETFOCUS auftreten.

Zum Schluss verkleinern Sie das Fenster zum Symbol. Beachten Sie dabei, dass das Fenster außer einer WM_SYSCOMMAND auch wieder eine WM_SIZE Nachricht erhält. Sehen Sie sich die Zusatzinfo zur WM_SIZE Nachricht an.

Damit sind wir am Ende des ersten Kapitels angekommen. Im nächsten Kapitel werden Sie lernen wie WINDOWS Programme ohne MFC funktionieren und wie Sie solche Programme erstellen.

Zurück Zum Inhaltsverzeichnis Weiter



Copyright © 2004

Senden Sie Emails mit Fragen oder Kommentaren zu dieser Website an: mailto:info@cpp-tutor.de
 Wolfgang Schröder, Lerchenweg 23, D-72805 Lichtenstein. Tel: +49 7129 6470