GamepadControl

    • Release
    • Open Source

      GamepadControl

      Name:
      GamepadControl v1.0

      Kurze Beschreibung:
      Steuert Tastatur und Maus durch ein angeschlossenes Gamepad (z.B. XBOX 360 Gamepad).
      Benötigt Administratorrechte (siehe Punkt "Warum Administratorrechte?").

      Screenshots:


      Ausführliche Beschreibung:
      Das Programm kann Aktionen an Tasten, Sticks und Trigger (nachfolgend der Kürze wegen einfach mit "Tasten" abgekürzt) eines angesteckten Gamepads binden und somit diverse Aktionen am Computer ausführen.
      Die Namen der Tasten sind aktuell auf XBOX 360 Gamepads ausgelegt. XBOX One Gamepads funktionieren ebenfalls problemlos. Playstation Gamepads sollten auch funktionieren (bisher ungetestet), die Tasten heißen dann halt anders (z.B. die Kreis-Taste des Playstation Gamepads müsste der B-Taste des XBOX 360 Gamepads entsprechen).
      Im Hintergrund wird XInput verwendet. Siehe auch Punkt "Bekannte Probleme".

      Im Hauptfenster:
      Änderungen von Einstellungen im Hauptfenster werden sofort übernommen. Wird z.B. eine Konfiguration entfernt, ist sie unwiederbringlich gelöscht.
      Die F1-Taste öffnet das Debug-Fenster, in dem die Zustände aller Gamepads angezeigt werden.
      • Konfigurationen:
        Hier sind die verfügbaren Konfigurationen aufgelistet. Konfigurationen definieren, welche Aktion welcher Taste zugeordnet ist. Jede Konfiguration kann beliebig viele Aktionen beinhalten (manche Aktionen können ihrerseits wieder Unter-Aktionen beinhalten). Tasten können mit beliebig vielen Aktionen belegt werden.
        Ein Klick auf das X entfernt eine Konfiguration nach einer Bestätigung.
        Die Hoch- und Runter-Pfeile verschieben die Konfiguration nach oben und unten.
        Ein Klick auf den Stift öffnet den "Konfiguration editieren"-Dialog mit dieser Konfiguration.
      • Gamepads:
        Hier werden die vier potenziell verfügbaren Gamepads angezeigt. XInput unterstützt bis zu vier Gamepads.
        Die "Verbunden"-CheckBox zeigt an, ob ein Gamepad mit dieser Spieler-Nummer verfügbar ist (das heißt, ob das Kabel angeschlossen ist).
        Ein Gamepad kann nur Aktionen ausführen, wenn die "Aktiv"-CheckBox angehakt ist. Andernfalls werden alle Eingaben des Gamepads ignoriert.
        In der ComboBox kann aus den verfügbaren Konfigurationen eine ausgewählt werden. Tasten dieses Gamepads führen die Aktionen in der ausgewählten Konfiguration aus.
      Im "Konfiguration editieren"-Dialog:
      Änderungen von Einstellungen in diesem Dialog werden erst nach einem Klick auf "OK" übernommen. Wird auf "Abbrechen" geklickt, werden die Änderungen verworfen.
      • Name:
        Jeder Konfiguration kann ein Name gegeben werden. Dieser Name wird immer dort angezeigt, wo auf eine Konfiguration verwiesen wird (z.B. die ausgewählte Konfiguration eines Gamepads).
      • Aktionen:
        Durch den "Hinzufügen"-Button können neue Aktionen hinzugefügt werden.
        Durch einen Klick auf das X bei einer Aktion wird die Aktion nach einer Bestätigung entfernt.
        Abhängig davon, ob eine Taste, eine Stick oder eine Trigger ausgewählt ist, können unterschiedliche Aktionen ausgewählt werden.
        Alle Aktionen und deren Einstellungen sind in der nachfolgenden Liste erklärt.
      Liste aller Aktionen

      Es gibt Aktionen für die folgenden, verschiedenen Eingabe-Arten:
      • Tasten: A, B, X, Y, Linker Bumper, Rechter Bumper, D-Pad Hoch, D-Pad Runter, D-Pad Links, D-Pad Rechts, Back, Start, Linke Stick-Taste, Rechte Stick-Taste
      • Sticks: Linker Stick, Rechter Stick
      • Trigger: Linker Trigger, Rechter Trigger

      Aktionen für Tasten:
      Diese Aktionen können sowohl auf das Drücken, als auch auf das Loslassen einer Gamepad-Taste reagieren.
      • Konfiguration wechseln:
        Beim Ausführen dieser Aktion wird die Konfiguration des Gamepads, dessen Taste die Aktion ausgelöst hat, durch die ausgewählte Aktion ersetzt.
        Dadurch kann zwischen Konfigurationen für unterschiedliche Situationen gewechselt werden.
      • Tastaturtaste:
        Drückt eine Taste der Tastatur. Die Tastaturtaste bleibt gedrückt, solange die Taste des Gamepads gedrückt bleibt.
        • Modus "Taste":
          In diesem Modus kann eine Taste des VK-Enum ausgewählt werden. So können Tasten betätigt werden, die spezielle Funktionen haben (z.B: F-Tasten, Escape, CapsLock, etc.).
          Zur Information: Die Alt-Taste (z.B. für Alt+Tab) heißt "LMENU".
        • Modus "Zeichen":
          In diesem Modus wird automatisch die Taste gedrückt, die das angegebene Zeichen z.B. in eine TextBox eingibt. So können Zeichen eingegeben werden, für die die zu verwendende Taste nicht offensichtlich ist (z.B. "+", "´", etc.)
      • Maustaste:
        Drückt die linke oder rechte Maustaste oder drückt das Mausrad (auch als "Mittlere Maustaste" bekannt).
      • Maus verschieben:
        Verschiebt die Position des Mauszeigers auf dem Bildschirm um die angegebene Anzahl an Pixel in die angegebene Richtung.
      • Auswahl aus mehreren Aktionen:
        Öffnet beim Ausführen ein Auswahl-Menü um den Mauszeiger, in dem aus weiteren Tasten-Aktionen ausgewählt werden kann.

        Eine Aktion kann mit dem linken oder rechten Stick oder dem D-Pad ausgewählt und anschließend mit der A-Taste ausgeführt werden. Die B-Taste bricht die Auswahl ab.
        Diese Aktion kann auch verschachtelt werden.
      • Programm ausführen:
        Führt die angegebene Datei mit Process.Start() aus. Dies kann ein absoluter ("C:\Program Files\Foo\Foo.exe"), relativer ("..\Foo\Foo.exe") oder durch die PATH-Systemvariable relativer Pfad ("notepad.exe") sein.
        Wenn es sich um eine ausführbare Datei (".exe") handelt, wird diese mit dem angegebenen Befehlszeilenparameter gestartet.
        Wenn es sich um eine anderen Datei handelt, wird das in Windows zugeordneten Programm mit dem Dateipfad als Befehlszeilenargument gestartet. Zusätzliche Befehlszeilenargumente werden dabei wohl ignoriert.
      • Mehrere Aktionen in Folge:
        Führt mehrere Unter-Aktionen hintereinander aus. Es können nur Aktionen für Tasten verwendet werden. So können z.B. Tastenkombinationen gedrückt werden. Die Unter-Aktionen werden in der Reihenfolge ausgeführt, in der sie in der Liste angezeigt werden. Mit den Hoch- und Runter-Pfeilen kann die Reihenfolge verändert werden.
        In umgekehrter Reihenfolge loslassen: Sind zum Beispiel zwei Unteraktionen vorhanden - die erste drückt die "Strg"-Taste, die zweite die "C"-Taste - so wird beim Drücken der Gamepad-Taste zuerst die "Strg"-Taste und anschließend die "C"-Taste gedrückt und gehalten. Ist die CheckBox nicht angehakt, wird beim Loslassen der Gamepad-Taste zuerst die "Strg"-Taste, dann die "C"-Taste losgelassen. Andernfalls andersrum.

      Aktionen für Sticks:
      Diese Aktionen werden kontinuierlich ausgeführt und verwenden die Auslenkung des Sticks zur Bestimmung des Verhaltens.
      • Maus bewegen:
        Bewegt den Mauszeiger mit der angegebenen Geschwindigkeit (in Pixel pro Sekunde) in die durch den Stick angegebene Richtung. Ist die "X umkehren"-CheckBox nicht angehakt, wird der Mauszeiger nach rechts bewegt, wenn der Stick nach rechts gedrückt wird. Andernfalls wird wird der Mauszeiger nach links bewegt, wenn der Stick nach rechts gedrückt wird. Das selbe Prinzip gilt für "Y umkehren".
        Die Beschleunigungskurve gibt das Verhältnis zwischen der Auslenkung des Sticks und der Geschwindigkeit des Mauszeigers an. Ein hoher Exponent erlaubt mehr Präzision bei langsameren Geschwindigkeiten.
        Eine Auslenkung des Sticks von 0% führt immer zu einer Geschwindigkeit von 0% und eine Auslenkung von 100% immer zu 100% der angegebenen Geschwindigkeit. Bei einer linearen Beschleunigungskurve führt eine Auslenkung von 50% zu 50% der angegebenen Geschwindigkeit (errechnet durch (50%) ^ 1 * Geschwindigkeit), bei einer quadratische Beschleunigungskurve jedoch zu 25% (errechnet durch (50%) ^ 2 * Geschwindigkeit). Die Funktion für die Mauszeigergeschwindigkeit ist also Auslenkung ^ Exponent * Geschwindigkeit, wobei die Auslenkung zwischen 0 (Stick in Nullstellung) und 1 (Stick maximal in eine beliebige Richtung gedrückt) liegt.
        Das folgende Diagramm zeigt die möglichen Beschleunigungskurven. Die X-Achse entspricht der Auslenkung, die Y-Achse * Geschwindigkeit der Mauszeigergeschwindigkeit.

        Geschwindigkeit 800 und Beschleunigungskurve "^ 1.5" scheint ein guter Standard zu sein.
      • Mausrad drehen:
        Simuliert drehungen des Mausrades. Die Geschwindigkeit ist in Rasten pro Sekunde angegeben. Die Funktionsweise ist die selbe wie die der "Maus bewegen"-Aktion.
        Geschwindigkeit 6000 und Beschleunigungskurve "Quadratisch" scheint ein guter Standard zu sein.

      Aktionen für Trigger:
      Diese Aktionen werden kontinuierlich ausgeführt und verwenden die Auslenkung des Triggers zur Bestimmung des Verhaltens.
      Aktuell noch keine. Vorschläge sind willkommen.
      Im Programm kann "Debug-Aktion für Trigger" ausgewählt werden. Das ist ein Platzhalter der keine Funktion hat. Er dient nur zum Testen.


      Verwendete Programmiersprache und IDE:
      Visual Basic .NET (Visual Basic 2010 Express)

      Systemanforderungen:
      .Net Framework 4.0
      XInput9_1_0.dll muss vorhanden sein. Siehe auch Punkt "Bekannte Probleme".
      Mindestens ein XInput-kompatibles Gamepad
      Administratorrechte für das Programm

      Warum Administratorrechte?:
      Windows erlaubt es Programmen mit geringeren Rechten nicht, Programme mit höheren Rechten zu steuern. Das heißt, wird GamepadControl ohne Administratorrechte ausgeführt, können keine Programme gesteuert werden, die mit Administratorrechten gestartet wurden (zum Beispiel RegEdit oder die Bildschirmtastatur). Siehe auch OnScreenKeyboard reagiert nicht auf WinAPI SendInput
      Wer das Programm trotzdem nicht mit Administratorrechten starten möchte/kann, kann das Projekt herunterladen, in der "app.manifest"-Datei "requireAdministrator" bei "requestedExecutionLevel" auf "asInvoker" abändern und das Programm neu kompilieren.

      Systemveränderungen:
      Das Programm erstellt die Datei "%LocalAppData%\GamepadControl\Settings.xml", in welcher die Konfigurationen und Gamepad-Einstellungen gespeichert sind. Diese Datei und der Ordner, in dem sie sich befindet, kann einfach manuell gelöscht werden.

      Download:
      GamepadControl v1.0 Programm.zip Programm (EXE und DLLs) (158 kB gepackt, 357 kB entpackt)
      GamepadControl v1.0 Projekt.zip Projekt (enthält referenzierte DLLs) (183 kB gepackt, 492 kB entpackt)

      Lizenz/Weitergabe:
      Das Programm darf beliebig weitergegeben werden, solange dafür kein Geld verlangt wird.
      Einkompilieren erlaubt (Erwähnung wäre nett).
      Dekompilieren erlaubt, ich beantworte Fragen zum Code aber auch gerne selbst und das Projekt ist ja auch dabei.

      Bekannte Probleme:
      • Wenn die Trigger eines XBOX One Gamepads nicht richtig funktionieren (das sollte sich dann auch in anderen Programmen/Spielen zeigen), dann kann das damit zusammenhängen, dass die Art, wie Trigger beim XBOX One Gamepad funktionieren, geändert wurde. Im Geräte-Manager den Treiber zu aktualisieren, behebt das Problem normalerweise:

      • Stürzt das Programm beim Aktivieren eines Gamepads ab (entweder manuell durch das Anhaken einer CheckBox oder direkt nach dem Start, wenn Einstellungen geladen wurden, die ein Gamepad aktivieren), dann liegt das wahrscheinlich daran, dass die benötigte XInput9_1_0.dll nicht vorhanden ist. Diese liegt üblicherweise in "C:\Windows\System32\XInput9_1_0.dll" bzw. "C:\Windows\SysWOW64\XInput9_1_0.dll". Sollte bei jemandem nur eine andere Version vorhanden sein, kann das DllImport-Attribut bei XInput.Native.NativeGamepadState.XInputGetState abgeändert werden. Ich habe bei mir neben XInput9_1_0.dll auch XInput1_4.dll getestet.
      "Luckily luh... luckily it wasn't poi-"
      -- Brady in Wonderland, 23. Februar 2015, 1:56
      Desktop Pinner | ApplicationSettings | OnUtils