2010-04-15 9 views
13

Quelqu'un peut-il me dire comment accrocher/superposer un jeu DirectX en C#?Hook/Overlay un jeu DirectX?

J'ai essayé d'obtenir une fenêtre C# en plein écran pour chevaucher un jeu, mais ce n'est pas le cas. Après quelques recherches, j'ai découvert que je devais accrocher le jeu et ensuite afficher la fenêtre C#. Est-ce que quelqu'un peut expliquer comment je ferais cela? Serais-je capable d'afficher un formulaire C# sur un jeu DirectX?

+0

Quelqu'un? Si quelqu'un a vu la superposition Steam ou xFire, je le veux comme ça. Les utilisateurs peuvent surfer sur le net tout en jouant à des jeux, etc. –

Répondre

5

(divulgation: Je travaille pour cette entreprise)

vous pouvez essayer notre Deviare API, il dispose de fonctionnalités pour connecter des objets COM à partir de C#. Il s'agit d'un ensemble d'objets COM pouvant être utilisés à partir de n'importe quel langage de programmation (prenant en charge COM). Un article avec le code source montrant comment capturer la vidéo et ajouter une superposition est disponible: instrumenting Direct3D applications to capture video and calculate FPS

COM Spy Console et Direct Sound Capture sont deux exemples qui implémente une console pour accrocher des objets COM comme DirectX.

Espérons que ça aide.

+0

Merci. J'ai postulé pour cela.Pourriez-vous expliquer comment je pourrais obtenir l'API Deviare pour accrocher un jeu DirectX, et afficher quelque chose? Merci encore. –

+1

Vous pouvez poser des questions dans les forums connexes. Ma recommandation utilise les articles comme point de départ. –

+1

Cela ne résout pas le problème pour les autres. Veuillez décrire la solution. –

2

Étant donné que vous n'avez pas d'accès direct DirectX à partir de C#, cela peut être difficile.

De ma compréhension limitée du concept:

crochets DirectX se composent de se fixer à un contexte de DirectX et de les manipuler, cela peut/ne peut pas exiger de jouer avec la mémoire d'un autre programme, ce qui convient le mieux à C/C++

Je peux me tromper bien, mais cela est un sujet avancé et mon instinct me dit que vous pouvez avoir des problèmes sous .NET

+0

Que diriez-vous de faire l'accrochage avec C++, et puis exécuter le programme C# à partir du crochet? Cela ne ferait-il pas l'émission C#, ou ça ne marche pas comme ça? –

+0

Non, vous ne pouvez pas afficher un programme C# au sein de C++ non géré comme ça. Une suggestion courante consiste à utiliser C++/CLI pour un encapsuleur C++ géré/non géré à demi-interface avec DirectX mais aussi la moitié d'une bibliothèque "gérée" que C# peut appeler directement. Mais ça a l'air moche. L'exemple d'accrochage et de recouvrement de Spazzarrama (Justin S. ^) fonctionne parfaitement et constitue une ressource inestimable. – Jason

16

Vous pouvez essayer my example on hooking the Direct3D 9 API using C#. Cela utilise EasyHook un assembly .NET open source qui vous permet d'installer des hooks à partir de code managé dans des fonctions non managées. SlimDX est également utilisé - il s'agit d'un wrapper géré open source autour des bibliothèques Direct3D.

La partie délicate de l'accrochage consiste à déterminer les adresses des fonctions virtuelles d'un objet COM. Ceci est fait dans l'exemple ci-dessus en utilisant une petite DLL auxiliaire C++ qui trouve les adresses de la VTable. [Mise à jour: il y a un commentaire posté qui montre comment obtenir les pointeurs de fonction de la VTable en C# également - donné un IntPtr à l'objet com]

L'exemple accroche la méthode EndScene d'un IDirect3DDevice9, qui est aussi où vous voudrait dessiner des superpositions. En ce qui concerne l'affichage d'un formulaire dans la superposition, je ne suis pas sûr que ce sera si facile - je veux dire que vous pouvez rendre l'image assez facilement, mais vous devrez capturer les entrées et répondre/passer manuellement les événements au formulaire question appropriée. Bonne chance!

+1

Voici une version mise à jour qui a un exemple de superposition très simple - également 100% C#: [Direct3D 9 , 10 overlay] (http://spazzarama.wordpress.com/2011/03/14/c-screen-capture-and-overlays-for-direct3d-9-10-and-11-using-api-hooks/) –