Wie erstelle ich ein virtuelles gamepad?
Wie würde ich mich über die Schaffung eines "gamepad", das erscheint, die DirectInput-Anwendungen wie ein normaler game controller aber der Staat seine Kontrollen ist definiert durch software?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben Sie einen Gerätetreiber, um vorgeben zu sein.
Insbesondere Windows-Gerätetreiber verarbeiten, was genannt werden Interrupt-Anforderungen über den Interrupt-Request-Protokolls - das läuft darauf hinaus, eine eingewickelt Struktur und ein Satz von Puffern intern im Treiber.
Nun das nächste, was Sie wissen müssen, ist, dass viele Treiber sind eigentlich geschichtet oder gestapelt, oder welche Namen Sie verwenden möchten. So zum Beispiel zum schreiben einer disk-Treiber, Sie könnten Schnittstelle mit dem Treiber oben (als disk-Klasse), aber ein Treiber unten (scsi-port, zum Beispiel), um tatsächlich senden Befehle an Ihre Geräte.
Dass Sie wie echte Geräte zu arbeiten. Gefälschte Geräte entsprechen müssen, um die top-level-Anforderungen an die Oberfläche, z.B. eine Platte, oder ein controller oder eine Maus, oder was immer es ist. Jedoch, unter dem Sie machen können was Sie wollen - die Rückkehr was auch immer Werte, die Sie mögen.
Dies eröffnet die Möglichkeit der Steuerung eines Treibers über eine Benutzer-Modus-Anwendung und vorgibt, "sein" Gerät. Um einen Fahrer schicken, Nachrichten, können Sie
DeviceIoControl
auf; dann bekommt man eigentlich diese Nachrichten können Sie entweder:Treiber können auch auf
\\Registry\\Machine
und verschiedenen anderen, nicht-Benutzer-spezifische non-explorer registry-Bereiche, so dass es möglich ist, zu kommunizieren, dass die Art und Weise.Schließlich, man kann nicht sagen Sie können nicht filtern vorhandenen IO, anstatt alles über ein neues Gerät. Es gibt sehr viele Optionen und Möglichkeiten, wie Sie gehen über das tun dies.
Wenn du gehst, um dies zu tun, müssen Sie:
Werden Sie wahrscheinlich auch anfangen wollen, mit den Referenzen auf in diesem blog-post. Finden Sie, dass es im wesentlichen eine bazillion verschiedene Namen für Treiber-code, also werde ich interpretieren einige von Ihnen:
Bearbeiten: ich bin nicht Massiv kenntnisreich über DirectInput - es kann ein Weg sein, um das überschreiben der verschiedenen API-Steuerelemente, die über die DLL-Umleitung und dergleichen, was kann einfacher sein als der Weg, den ich beschrieben habe.
Es ist vJoy opensource-Projekt: http://sourceforge.net/projects/vjoystick/ - kann sich sehen lassen.
Die einfachste Lösung sein kann, um zu emulieren einen XInput-Gerät (Xbox 360 und One). Diese unterstützt in den meisten modernen Spiele und das set up ist sehr einfach. Hier ist ein C++ - Projekt hier, das diese ohne installierten Treiber oder externe Abhängigkeiten: https://github.com/shauleiz/vXboxInterface/
Ich weiß, es ist eine alte Frage, aber für alle, die sich für dieses Thema interessiert, es ist auch lohnt ein Blick auf dieses Projekt namens ViGEm.
Können Sie emulieren einige bekannte gamepads wie Microsoft Xbox 360 Controller, Sony DualShock 4 Controller und Microsoft Xbox One Controller. Das Projekt bietet auch einige API für die Interaktion mit diesen virtuellen Controllern.