Question

Comment pourrais-je aller sur la création d'une "manette" qui apparaît à DirectInput applications comme un contrôleur de jeu, mais l'état de ses commandes est en fait défini par logiciel?

Était-ce utile?

La solution

Écrire un pilote de périphérique pour faire semblant d'en être un.

Plus précisément, les pilotes de périphériques Windows gérer ce que l'on appelle des Requêtes d'Interruption via la Demande d'Interruption de Protocole - qui se résume à un enveloppé de la structure et un ensemble de tampons en interne dans le pilote.

Maintenant, la prochaine chose que vous devez savoir est que de nombreux pilotes sont en fait des couches, ou empilés, ou quel que soit le nom que vous souhaitez utiliser.Ainsi, par exemple, d'écrire un pilote de disque, vous risquez de l'interface avec le pilote au-dessus (comme un disque de la classe), mais utiliser un pilote en dessous (port scsi, par exemple) pour pouvoir envoyer des commandes à vos appareils.

C'est la façon dont les périphériques réels de travail.Faux les dispositifs doivent être conformes à la, de haut niveau, exigences d'interface, par ex.un disque, ou une manette ou une souris, ou quoi que ce soit.Cependant, en dessous ils peuvent faire ce qu'ils aiment - retour quelles que soient les valeurs qu'ils aiment.

Cela ouvre la possibilité de contrôler un conducteur via une application en mode utilisateur et faire semblant "d'être un" appareil.Envoyer un chauffeur de messages, vous pouvez DeviceIoControl à elle;alors en fait pour obtenir ces messages, vous pouvez soit:

  • Farcir dans l'Irp qui fait que DeviceIoControl.
  • Le pilote de les lire de votre processus de la mémoire de l'espace.

Les conducteurs peuvent également accéder à \\Registry\\Machine et divers autres, non spécifiques à l'utilisateur non-registre explorer des domaines, de sorte qu'il est possible de communiquer de cette façon.

Enfin, il n'y a pas de dire que vous ne pouvez pas filtrer les IO, plutôt que de faire tout cela en place, par l'intermédiaire d'un nouvel appareil.Il y a beaucoup d'options et de façons que vous pouvez aller à ce sujet.

Si vous allez pour ce faire, vous aurez besoin de:

  • VirtualKD ou cher débogueur de câble et de deux Pc.
  • Vous avez sans doute aussi souhaitez commencer avec les références sur ce blog.Vous trouverez qu'il ya essentiellement un bazillion différents noms de code de pilote, donc je vais interpréter certains d'entre eux:

    • WDM = Windows Driver Model, fondamentalement, le NT driver modèle mixte avec (certains) de Windows 9x.
    • KMDF = Kernel mode driver framework - conducteurs du type ci-dessus l'utilisation de cette, de plus en plus de la WDF (Windows Driver Foundation) qui est un ensemble de bibliothèques sur le dessus de la GDE pour la rendre plus rapide à utiliser.
    • UMDF = User mode driver framework - écrire un pilote sans le danger de la mode noyau.Si vous le pouvez, l'utiliser, comme les pilotes en mode noyau qui vont mal bluescreen (dans le pilote de langage, vérification d'erreur) de votre système.

Modifier:Je ne suis pas massivement bien informés sur DirectInput - il y a peut être un moyen de remplacer les différentes API des commandes en cours d'utilisation via la redirection de DLL et d'autres qui peut être plus simple que la façon dont je l'ai décrit.

Autres conseils

La solution la plus facile peut consister à imiter un dispositif Xinput (Xbox 360 et une).Celles-ci sont soutenues dans la plupart des jeux modernes et la mise en place est très simple.Voici un projet C ++ ici qui fournit cela sans pilotes installés ni dépendances externes: https://github.com/shauleiz/ vxboxterface /

Il y a VJOY OpenSource Project: http://sourceforge.net/projects/vjoystick/ -peut être la peine d'être regardé.

Je sais que c'est une vieille question, mais pour toute personne qui s'intéresse à ce sujet, il convient également de regarder ce projet appelé Vigem .

Vous pouvez imiter des cartes de jeu bien connues telles que Microsoft Xbox 360 Controller, contrôleur Sony Dualshock 4 et contrôleur Microsoft Xbox One.Le projet propose également une API d'interagir avec ces contrôleurs virtuels.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top