Pregunta

¿Cómo voy a crear un "gamepad" que parece que aparece las aplicaciones de direccionamiento como un controlador de juego normal, pero el estado de sus controles está definido en realidad por software?

¿Fue útil?

Solución

Escriba un controlador de dispositivo para pretender ser uno.

Específicamente, los controladores de dispositivos de Windows manejan lo que se denominan solicitudes de interrupción a través del protocolo de solicitud de interrupción, que se reduce a una estructura envuelta y un conjunto de búferes internamente en el controlador.

Ahora, lo siguiente que necesita saber es que muchos controladores realmente están en capas, o apilados, o cualquier nombre que desee usar. Así, por ejemplo, para escribir un controlador de disco, puede interactuar con el controlador por encima de él (como clase de disco), pero use un controlador debajo (puerto SCSI, por ejemplo) para enviar comandos en realidad a sus dispositivos.

Así es como funcionan los dispositivos reales. Los dispositivos falsos deben ajustarse a los requisitos de la interfaz de nivel superior, por ejemplo. Un disco, o un controlador, o un mouse, o lo que sea. Sin embargo, debajo de ellos pueden hacer lo que les gustan, devuelven los valores que les gusten.

Esto abre la posibilidad de controlar a un conductor a través de una aplicación en modo de usuario y fingiendo "ser" un dispositivo. Para enviar mensajes de controladores, puede generaracodiCetAcodicarlo; Luego, para obtener esos mensajes, puede:

  • los rellenos en el IRP que conforman ese dispositivo Deviceiocontrol.
  • Haz que el conductor los lévelos fuera del espacio de memoria de su proceso.

Los controladores también pueden acceder a DeviceIoControl y otras áreas de registro no exploradoras no específicas de usuario, por lo que es posible comunicarse de esa manera.

Finalmente, no hay dicho que no pueda filtrar IO existente, en lugar de hacerlo todo a través de un nuevo dispositivo. Hay una gran cantidad de opciones y formas en que puede hacer hacer esto.

Si va a hacer esto, necesitará:

  • virtualkd o un cable de depurador costoso y dos PC.
  • Es probable que también desee comenzar con las referencias en esta publicación de blog . Encontrará que hay esencialmente un nombre de bazillion diferentes para el código de conductor, por lo que interpretaré algunos de ellos:

    • WDM= modelo de controlador de Windows, básicamente el modelo de controlador NT mezclado con (algunas de) Windows 9x.
    • KMDF= Marco de controlador de modo kernel: los controladores del tipo anterior, use esto, además, además, WDF (Fundación del controlador de Windows), que es un conjunto de bibliotecas en la parte superior de WDM para que sea más rápido para usar.
    • UMDF= Modo de usuario Marco del controlador: escriba un controlador sin el peligro del modo Kernel. Si puede, use esto, ya que los controladores de modo kernel que van incorrectamente, Will Bluescreen (en el parlanchado del conductor, BUGCHECK) su sistema.

Editar : No estoy informado masivamente en DirectInput: puede haber una manera de anular los diversos controles de API en uso a través de la redirección DLL y similares, lo que puede ser más sencillo que la forma en que yo ' he descrito.

Otros consejos

La solución más fácil puede ser emular un dispositivo XInput (Xbox 360 y uno).Estos son apoyados en la mayoría de los juegos modernos y la configuración es muy simple.Aquí hay un proyecto C ++ aquí que proporciona esto sin ningún controlador instalado o dependencias externas: https://github.com/shauleiz/ VXBOXIRFACE /

Hay un proyecto VYJY OPENSOURCE: http://sourceforge.net/projects/vjoystick/ -vale la pena mirar a.

Sé que es una pregunta antigua, pero para cualquier persona que esté interesada en este tema, también vale la pena mirar este proyecto llamado VIGEM .

Puede emular algunos gamepads conocidos como Microsoft Xbox 360 Controller, Sony Dualshock 4 Controller y Microsoft Xbox One Controller.El proyecto también ofrece algunas API para interactuar con estos controladores virtuales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top