Laden...

Fenstertitel eines Fenster aus einer DirectX-Anwendung lesen

Erstellt von hypersurf vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.741 Views
H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 15 Jahren
Fenstertitel eines Fenster aus einer DirectX-Anwendung lesen

Hallo zusammen,

ich habe folgende Problemstellung:

Ich schreibe gerade ein Anitcheattool für ein Spiel. Dieses Tool liest in regelmäßigen Abständen Daten aus dem Speicherbereich des Spiels aus und protokolliert diese. Das ganze wird für einen offiziellen Wettbewerb (Europameisterschaft) des Spiels benötigt.
Damit kann die Jury später sicherstellen, dass jeder sich während der Missionen im Spiel an die vorgegebenen Parameter gehalten hat.

Hat ein Spieler eine Mission beendet, erscheint im Spiel ein spezieller Bildschirm. Diesen Bildschirm bzw. dieses Fenster muss ich irgendwie abfragen um gewisse Aktionen in meinem Programm auslösen zu können. Leider ist das Fenster anscheinend kein neues Fenster innerhalb der Anwendung, sondern wird einfach im Hauptfenster des Spiels dargestellt (ich weiss leider nicht genau wie das bei DirectX-Anwendungen funktioniert).

Jedenfalls habe ich mit diversen Prozessviewern versucht herauszufinden ob es sich hierbei um ein eigenes Fenster handelt oder nicht. Anscheinend nicht. Auch die EnumWindow-Klasse aus dem Thread Windowstitel auslesen gibt mir keine Childwindows wieder, wenn ich diese über das Handle der Hauptanwendung abfragen möchte.

Funktioniert die Fenstertechnik bei DirectX-Anwendungen anders? Oder ist es, wie vermutet kein neues Fenster was nach dem Beenden der Mission angezeigt wird. Gibt es die Möglichkeit Steuerelemente aus DirectX-Anwendungen abzufragen?

Wäre echt klasse, wenn mir jemand helfen könnte =)

Viele Grüße!

925 Beiträge seit 2004
vor 15 Jahren

Die Fenstertechnik funktioniert bei DirectX in der Tat gänzlich anders als in Windows selbst, ist davon auch völlig unabhängig. Für Windows gibt es in DX Anwendungen nur ein einziges Fenster, in dem alles andere abläuft. Windows kennt also nur ein Handle.

Wenn du Daten aus dem Spiel abfragen willst, musst du erstmal herausfinden, wie die strukturell im Speicher angeordnet sind und wo sie sich befinden. Direktes Auslesen aus dem Fenster wird nicht gehen.

//edit: Hooks wären eventuell noch 'ne Möglichkeit. Aber frag mich nicht danach. Damit kenn ich mich überhaupt nicht aus.

S
33 Beiträge seit 2008
vor 15 Jahren

In DirectX wird normalerweise in Surfaces gerendert: MSDN: Direct3D Surfaces (Direct3D 9)
Bei Controls innerhalb von Direct3D Fullscreen Applikationen handelt es sich normalerweise nicht um Windows Controls: MSDN: (SDK root)\Samples\Managed\Direct3D\CustomUI Die Controls haben (afaik) kein eigenes Handle und können nicht ohne weiteres von einer externen Applikation gelesen werden.

H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 15 Jahren

Ich hatte irgendwie gehofft dass es nicht so ist X(
Naja, dann muss ich irgendwie eine andere Lösung finden.

Vielen Dank für Eure Antworten!

925 Beiträge seit 2004
vor 15 Jahren

Mach's doch so, wie die ganzen Trainer-Programme das auch machen: Prozess-Speicher auslesen.

5.658 Beiträge seit 2006
vor 15 Jahren

Hat ein Spieler eine Mission beendet, erscheint im Spiel ein spezieller Bildschirm. Diesen Bildschirm bzw. dieses Fenster muss ich irgendwie abfragen um gewisse Aktionen in meinem Programm auslösen zu können. Leider ist das Fenster anscheinend kein neues Fenster innerhalb der Anwendung, sondern wird einfach im Hauptfenster des Spiels dargestellt (ich weiss leider nicht genau wie das bei DirectX-Anwendungen funktioniert).

Das geht definitiv nicht, wie ja schon gesagt wurde. Der "Bildschirm" ist ja nur eine Grafik, die in den Videospeicher gezeichnet wird, ebenso wie die Texte und Zahlen darauf. Dir bleibt tatsächlich nichts übrig, als den Speicher der Anwendung auszulesen.

Christian

Weeks of programming can save you hours of planning

925 Beiträge seit 2004
vor 15 Jahren

Naja, ich sag mal, bei Windows Handles machst du auch nichts anderes als den Speicher der Anwendung abzufragen. Es ist eben nur wesentlich einfacher, die genauen Offsets im Speicher zu ermitteln.