Mahlzeit miteinander.
Das eine oder andere Mal kamen hier schon Fragen auf, wie man sowohl lesend, als auch schreibend Zugriff auf laufende Direct3D/OGL-Screens bekommt. Mich selbst kitzelt es ja nun auch schon länger, dieses mal zu versuchen. Dass das nicht ganz ohne ist weiss ich (habs ja auch schon öfter mal geschrieben
).
Tja, und nun ist die Zeit gekommen: Ich bin heiss
Ich habe mich mal ein wenig auf die Suche gemacht um zu erfahren wie man das ganze angehen könnte, wobei ich meinen Schwerpunkt zunächst auf
DirectX legen werde, da man es auf Win-Plattformen doch etwas häufiger (bei Games o.ä.) antrifft.
Folgendes habe ich herausbekommen:
- API-Hooking ist das generelle Zauberwort
- Die MadCodeHook ist dabei mein aller bester Freund
- Es wären die Funktionen zu hooken, die den Backbuffer flippen
- Ich brauche wohl den DC
- Alles ist relativ Neuland für mich
Wie man grundsätzlich mit MadCodeHook einen globalen Hook erstellt, und selbigen auch injizieren kann, ist ja auf den Seiten von Madshi recht gut dokumentiert, und in der
DP finden sich auch ein paar wenige Schnipsel. Das sollte an Rahmen denke ich genügen.
Mein eigentliches Problem fängt dort an, wo es wirklich spannend wird:
Welche Funktionen aus welchen DLLs und vor allem mit welchen Parametern sind meine Ziele? Was bekomme ich dort dann heraus?
Zielsetzung ist ein Tool dass dem Screenshot/Screenvideo-Tool Fraps ähneln soll. Ich brauche also
nur Zugriff auf den Front- oder Backbuffer, so dass ich ein Bitmap befüllen kann. Sekundäres Ziel wäre eine Ausgabe in das Direct3D-Programm, so dass man z.B. Auskunft über diverse Dinge geben kann, wie restlicher Plattenplatz, Framerate (evtl.), ob Aufnahme aktiv oder nicht, etc.pp.
(Eventuell ließe sich ja sogar ein kleiner MP3-Player als Feature einbauen der direkt aus dem Spiel heraus bedient werden kann
*träum*)
Bei meinen Suchen bin ich auf
dieses Projekt gestoßen, und habe mir auch mal sie Sourcen angesehen, in der Hoffnung dort Anregung zu erhalten. Da meine C-Festigkeit leider gegen NULL (
) geht verstehe ich den Code faktisch garnicht. Ich habe nichtmal herausgefunden welche Funktionen welcher DLLs gehookt werden
Ich bin über wirklich jede Form von Hilfe dankbar, da sich zu dem Thema nicht allzuviel verständliches Material finden lässt.
Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel