2010-04-15 18 views
13

¿Alguien puede decirme cómo enganchar/superponer un juego de DirectX en C#?¿Enganchar/superponer un juego de DirectX?

He intentado obtener una ventana de C# a pantalla completa para superponer un juego, sin embargo no es así. Después de investigar un poco, descubrí que necesito enganchar el juego y luego mostrar la ventana de C#.

¿Alguien puede explicar cómo haría esto? ¿Podría mostrar un formulario C# sobre un juego DirectX?

+0

¿Alguien? Si alguien ha visto la superposición de Steam o xFire, lo quiero así. Los usuarios pueden navegar por la red mientras juegan juegos, etc. –

Respuesta

5

(divulgación: yo trabajo para esta compañía)

usted puede probar nuestro Deviare API, tiene funcionalidad para enganchar objetos COM desde C#. Es un conjunto de objetos COM que se pueden usar desde cualquier lenguaje de programación (compatible con COM). Un artículo con el código fuente que muestra cómo capturar vídeo y añadir una superposición está disponible: instrumenting Direct3D applications to capture video and calculate FPS

COM Spy Console y Direct Sound Capture son dos ejemplos que implementa una consola para conectar objetos COM como DirectX.

Espero que ayude.

+0

Gracias. Lo he solicitado.¿Podrías explicarme cómo podría obtener la API Deviare para conectar un juego DirectX y mostrar algo? Gracias de nuevo. –

+1

Puede hacer preguntas en los foros relacionados allí. Mi recomendación es usar los artículos como punto de partida. –

+1

Eso no resuelve el problema para otros. Por favor describe cuál es la solución. –

2

Dado que no tiene DirectX Access directo desde C# esto puede ser complicado.

Desde mi limitada comprensión del concepto:

DirectX Ganchos consisten de unir a un contexto DirectX y manipulándola, esto puede/no puede requerir de jugar con la memoria de otro programa, algo que es más adecuado para C/C++

puedo estar equivocado, sin embargo, sin embargo, este es un tema avanzado y mi instinto me dice que puede tener cuestiones en relación con .NET

+0

¿Qué tal hacer el enganche con C++, y luego ejecutar el programa C# desde el gancho? ¿Eso no haría que el programa C# se muestre, o no funciona así? –

+0

No, no puede mostrar un programa C# dentro de C++ no administrado. Una sugerencia común es usar C++/CLI para un contenedor administrado/no administrado de C++ que media interfaz con DirectX pero también la mitad de una biblioteca "administrada" a la que C# puede llamar directamente. Pero se ve feo. El ejemplo de enganche y superposición de Spazzarrama (Justin S. ^) funciona perfectamente y fue un recurso invaluable. – Jason

16

Puede intentar my example on hooking the Direct3D 9 API using C#. Esto utiliza EasyHook, un ensamblaje .NET de fuente abierta que le permite instalar ganchos desde el código administrado en funciones no administradas.

SlimDX también se utiliza; se trata de un contenedor administrado de código abierto alrededor de las bibliotecas Direct3D.

La parte engañosa del enganche es determinar las direcciones de las funciones virtuales de un objeto COM. Esto se hace en el ejemplo anterior utilizando una pequeña DLL auxiliar de C++ que encuentra las direcciones de la VTable. [Actualización: hay un comentario publicado que muestra cómo obtener los punteros a la función de la VTable en C# también - dado un IntPtr al objeto com]

El ejemplo engancha el método EndScene de un IDirect3DDevice9, que también es donde querría dibujar cualquier superposición. En cuanto a mostrar un formulario en la superposición, no estoy tan seguro de que sea tan fácil, quiero decir que puedes renderizar la imagen con bastante facilidad, pero tendrás que capturar las entradas y responder/pasar manualmente los eventos a la forma en pregunta apropiadamente. ¡Buena suerte!

+1

Aquí hay una versión actualizada que tiene un ejemplo de superposición muy simple: también 100% C#: [Direct3D 9 , 10 superposición] (http://spazzarama.wordpress.com/2011/03/14/c-screen-capture-and-overlays-for-direct3d-9-10-and-11-using-api-hooks/) –

Cuestiones relacionadas