🕹️ Flexible gamepad input mapping for keyboard and mouse, built to be quick to set up, easy to configure and highly customizable.
- This tool lets you send mouse and keyboard input using your XInput controller with a great level of customization.
- It's designed to make controller configuration fast and simple: just open a config
.iniand edit assignments, modifiers and variables. - Config files can be edited and reloaded on-the-fly using a hotkey, without restarting the application.
- It provides fine control over several controller aspects: deadzone types (square/rectangular, circular with and without rescale), deadzone values (per stick, axis, or direction), axis inversion, modifiers (
[Toggle],[Turbo],[TurboToggle],[Execute],[Combo],[Sequence]and others) and more. - Planned features will include a tray-resident profile switcher and a more advanced
[MACRO]modifier.
⚠️ Joynix requires an Xinput controller (native or emulated via tools like DS4Windows, DualSenseX, x360ce, etc.).
- The program includes several modifiers, which change the button behaviour.
Just add one of these modifiers before the assigned keys: [Toggle], [Turbo], [TurboToggle][Combo]: send multiple keys at once[Execute]: run programs (e.g.notepad,calc.exe,c:\yourfolder\yourprogram.exe)[ComboAsync]: send multiple keys with a delay between each key (defined withComboKeysDelay)[ToggleCombo], [TurboCombo], [TurboToggleCombo][Sequence]: send keys in sequence. Similar to[ComboAsync], but ComboAsync sends and holds the keys,[Sequence]sends simple presses.[Text]: send up to 200 characters (e.g.[TEXT]this is a string). Not intended for games.[Hold]: perform different actions depending on how long the button is held. Short press sends the 1st key, medium press sends the 2nd key, long press sends the 3rd key. (e.g.[Hold] a, b, c)[FastPress]: repeatedly press the button to cycle through the keys to send (define the keys after the modifier, e.g.[FastPress] a, b, c).[Shift]: add a set of keys (up to 5, e.g.[Shift] a, b, c, d, e) and switch between them using the ShiftMode modifiers:[ShiftMode]: press and hold to change the active Shift key (define the target key number after the modifier, e.g.[ShiftMode] 3).[ShiftModeToggle]: same as above, but the button acts as a toggle.[ShiftModeCycle-], [ShiftModeCyle+]or[ShiftModeCyle]: cycle through the available Shift keys. These modifiers do not require a value (e.g.LT = [ShiftModeCyle+]).- These modifiers can also be activated via configurable keyboard hotkeys.
- Set
AnalogToMouse = 1(enabled by default) to move the mouse with the analog stick defined inStick(default:Stick = RS). - Mouse wheel input is digital when assigned to buttons, and analog/progressive when assigned to sticks or triggers.
- Configs can be loaded through
ConfigToLoadinJoynix.config, via command line, or by drag and drop.
- Configuration files can be edited while the game is running.
- Just press the Hotkey (
Shift+Ctrl+5by default) to instantly reload the current.ini, without restarting the application. - The Hotkey can be customized in
GamepadToKeyboard.config.
Values you can assign to the buttons:
A..Z,0..9,F1..F12- common buttons:
Enter,Space,Esc,Lalt,Lshift,Lctrl,Lwin - mouse buttons:
LBmouse,RBmouse,MBmouse,WheelUp,WheelDown
- Just add one modifier to button assignments, placing it before the keys (e.g
A = [Turbo]c). - Each key must be separated with
,. Extra spaces are ignored (e.gA = [COMBO] c,S, L,Lbmouse). - Modifiers are case-insensitive (
[Turbo],[TURBO]and[turbo]are equivalent). - Spaces after modifiers are optional (
[Turbo]kand[Turbo] kare both valid). - Combo-based modifiers support up to 10 buttons, while
[Sequence]supports up to 15. Any additional keys are ignored.
Example syntax:
| Button | Assignment | Button | Assignment | | Button | Assignment | | |
|---|---|---|---|---|---|---|---|---|
A |
Enter | Back |
F1 | LSup |
Up | |||
B |
[Turbo] Space | Start |
Esc | LSdown |
Down | |||
X |
[ComboAsync] S, Space,r | LS |
[Toggle]LShift | LSleft |
Left | |||
Y |
[COMBO]A,x,F,LBmouse | RS |
[execute] calc.exe | LSright |
Right | |||
LB |
RBmouse | Dup |
Up | RSup |
||||
RB |
LBmouse | Ddown |
Down | RSdown |
||||
LT |
Wheelup | Dleft |
Left | RSleft |
||||
RT |
WheelDown | Dright |
Right | RSright |
||||
Home |
Lwin |
| Section | Option | Values / Description |
|---|---|---|
| Mouse | AnalogToMouse | 1/0 : Turn On/Off the mouse movement via analog sticks. |
| Stick | RS/LS : Analog to use. Button assignments ignored. |
|
| Deadzoneshape | 1/2/3 : Square/Rectangular,Circular,Circular (with rescale). |
|
| DeadzoneType | 1/2/4 : Both axis/ per axis/ per direction. |
|
| (Stick)AxisInverted | 1/0 : Turn On/off axis inversion. 4 options available. |
|
| Sensitivity | Value : Mouse movement speed. |
|
| Analogs | DeadzoneType | 1/2/4/8: Both sticks/ per stick/ per axis/ per direction. |
| (Stick)AxisInverted | 1/0 : Turn On/off axis inversion. 4 options available. |
|
| Other | SendKeysTypes | 1: Game mode; 2: Desktop (with windows-style keypress delay + repeat) |
The program supports several configurable hotkeys. They can be set in Joynix.config and disabled if needed.
- Configuration reload:
Shift + Ctrl + 5(already described above). - Stats system:
Shift + Ctrl + 6(default). - ShiftMode controls:
ShiftModeToggle,ShiftModeCycle-,ShiftModeCycle+, disabled by default. - To enable/disable a hotkey, use the corresponding boolean flag in
Joynix.config: e.g.KeyboardShiftEnabled = False.
- Add only one modifier per assignment (e.g
[Turbo][Combo]NOT supported). - Please don't assign
[Turbo]and other Turbo-based modifiers to Wheel, since it has dedicated repetition variables. - When multiple
[Shift]assignments are used together with ShiftModeCycle modifiers, it is recommended to use the same number of keys in each assignment. Different lengths are supported (e.g.LT = [Shift] a,b,c,d,eandRT = [Shift] j,k,l), but may produce less predictable results. - Timing-related modifiers can be customized through their dedicated variables:
[ComboAsync]and[Sequence]: configurable delays throughComboAsyncTimeandSequenceTime(ms).[FastPress]: configurable time window throughFastPressTime.[Hold]: configurable hold duration thresholds throughHoldTime.
- The Windows key may not behave exactly like a physical key due to Windows focus-handling limitations.
- Please don't use
CTRLDOWN,ALTDOWN,SHIFTDOWN,LWINDOWN,RWINDOWNin the assignments. These special keys are handled throughLAlt,LCtrl,RAlt,RCtrl,LWin, andRWin.
- The exe that comes with the extension is 64bit. The reason is that the x64 version of Autoit programs receive minor flags from AV engines. If you need the x86 one you can download it from the main in the repo, or from the attached files in the releases.
- The program does not contain any malicious behaviour. If your AV engine flags it as malware it's a false positive. If so, please send
Joynix.exe(or any associated flagged file) to your AV vendor asking for a false positive review request.
If you enjoy Joynix, you can buy me a coffee. It will be very appreciated ;)
SPACE, ENTER, ALT, BACKSPACE, BS, DELETE, DEL, UP, DOWN, LEFT, RIGHT, HOME, END, ESCAPE, ESC, INSERT, INS, PGUP, PGDN, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TAB, PRINTSCREEN, LWIN, RWIN, NUMLOCK on, CAPSLOCK off, SCROLLLOCK toggle, BREAK, PAUSE, NUMPAD0, NUMPAD1, NUMPAD2, NUMPAD3, NUMPAD4, NUMPAD5, NUMPAD6, NUMPAD7, NUMPAD8, NUMPAD9, NUMPADMULT, NUMPADADD, NUMPADSUB, NUMPADDIV, NUMPADDOT, NUMPADENTER, APPSKEY, LALT, RALT, LCTRL, RCTRL, LSHIFT, RSHIFT, SLEEP, ASC nnnn, BROWSER_BACK, BROWSER_FORWARD, BROWSER_REFRESH, BROWSER_STOP, BROWSER_SEARCH, BROWSER_FAVORITES, BROWSER_HOME, VOLUME_MUTE, VOLUME_DOWN, VOLUME_UP, MEDIA_NEXT, MEDIA_PREV, MEDIA_STOP, MEDIA_PLAY_PAUSE, LAUNCH_MAIL, LAUNCH_MEDIA, LAUNCH_APP1, LAUNCH_APP2, OEM_102
This gamepad script was written in AutoIt.
The program makes use of a remodified version of the XInput UDF by Oxin8 (xoninx@gmail.com) to read Xinput states.