13 Stimmen

Hook/Overlay ein DirectX-Spiel?

Kann mir jemand sagen, wie man Hook/Overlay ein DirectX-Spiel in C#?

Ich habe versucht, ein Vollbild-C#-Fenster zu bekommen, ein Spiel zu überlappen, aber es wird nicht. Nach der Erforschung ein wenig, fand ich heraus, dass ich das Spiel zu haken und dann das C#-Fenster anzeigen müssen.

Kann mir jemand erklären, wie ich das machen soll? Wäre ich in der Lage, ein C#-Formular über ein DirectX-Spiel anzuzeigen?

16voto

Justin Stenning Punkte 1827

Sie können versuchen mein Beispiel für das Hooking der Direct3D 9 API mit C# . Dabei wird EasyHook verwendet, eine Open-Source-.NET-Assembly, mit der Sie Hooks aus verwaltetem Code in nicht verwaltete Funktionen installieren können.

Außerdem wird SlimDX verwendet, ein quelloffener, verwalteter Wrapper für die Direct3D-Bibliotheken.

Der knifflige Teil des Hookings ist die Ermittlung der Adressen der virtuellen Funktionen eines COM-Objekts. Dies geschieht im obigen Beispiel mit einer kleinen C++-Hilfs-DLL, die die Adressen aus der VTable ermittelt. [Update: es gibt einen Kommentar gepostet, die zeigt, wie die Funktion Zeiger aus der VTable in C# auch erhalten - gegeben eine IntPtr auf das COM-Objekt]

Das Beispiel greift auf die EndScene-Methode eines IDirect3DDevice9 zurück, wo auch die Overlays gezeichnet werden sollen. Was die Anzeige eines Formulars im Overlay betrifft, bin ich mir nicht sicher, ob das so einfach sein wird - ich meine, Sie können das Bild leicht genug rendern, aber Sie müssen Eingaben erfassen und manuell auf die Ereignisse reagieren bzw. diese an das betreffende Formular weiterleiten. Viel Glück!

5voto

sw. Punkte 3172

(Offenlegung: Ich arbeite für dieses Unternehmen)

Sie können unser Deviare API Es verfügt über Funktionen zum Hooken von COM-Objekten aus C#. Es handelt sich um einen Satz von COM-Objekten, die von jeder Programmiersprache (die COM unterstützt) verwendet werden können. Ein Artikel mit Quellcode, der zeigt, wie man ein Video aufnimmt und ein Overlay hinzufügt, ist verfügbar: Instrumentierung von Direct3D-Anwendungen zur Videoaufzeichnung und Berechnung der FPS

COM-Spionage-Konsole y Direkte Tonaufzeichnung sind zwei Beispiele, die eine Konsole implementieren, um COM-Objekte wie DirectX zu nutzen.

Ich hoffe, es hilft.

2voto

Aren Punkte 52850

Da Sie keinen direkten DirectX-Zugriff von C# aus haben, kann dies schwierig sein.

Nach meinem begrenzten Verständnis des Konzepts:

DirectX-Hooks bestehen darin, sich an einen DirectX-Kontext anzuhängen und diesen zu manipulieren. Dies kann/kann nicht bedeuten, dass man den Speicher eines anderen Programms manipulieren muss, etwas, das am besten für C/C++ geeignet ist.

Ich kann mich zwar irren, aber dies ist ein fortgeschrittenes Thema, und mein Gefühl sagt mir, dass Sie Probleme unter .NET haben könnten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X