Released February 16, 2023


The Game Automation Tool

Now Supports Windows 11!

No Credit Card or Email Required

Game Compatibility

ControlMyJoystick emulates a real joystick, keyboard and mouse. Most games will see these as real hardware devices, but some game developers may attempt to restrict access to these devices. The only way to know for sure is to try it.


ControlMyJoystick can take axis position data from a 3Dconnexion controller or joystick, apply a curve to it and then send it to the virtual joystick driver. 3Dconnexion also has it’s own KMJ driver that is installed when you install their 3DxWare10 software for their controllers. You may also have a physical joystick a driver which uses it’s own driver. So a game has three joysticks to choose from.

  • Tetherscript Virtual Controller
  • 3Dconnexion KMJ Driver
  • My RealPhysicalJoystick Driver

Some games will just default to the first available joystick and only accept input from that joystick. This happens more often on older games. Sometimes the Tetherscript Virtual Controller is not seen as the default joystick. The only way around this is to disable the drivers for all other joysticks and then restart the game.

Newer games generally allow a user to select which joystick to use. Some newer games even allow the selection of more than one joystick, so you can use one for flight controls and another joystick for throttle. These are great designs and make it very easy to use with ControlMyJoystick.

The 3Dconnexion KMJ Driver

The Keyboard, Mouse, Joystick driver that is installed with 3DxWare10 can cause problems. When you are mapping controls in-game, some games prompt you to move a joystick along an axis or press a button. These games may monitor all joystick drivers and look for the one that is emitting data.

If you are using a 3Dconnexion controller, both the KMJ driver and ControlMyJoystick’s Virtual Controller driver will emit data at the same time. This may cause the game to map to the KMJ driver instead of ControlMyJoystick’s virtual controller driver. If that happens, the game is listening to the wrong joystick driver and ControlMyJoystick’s ‘s curves and joystick button press scripts will not work properly.

The only workaround is to disable the KMJ driver, restart the game and then do the control mapping again. No data will be emitted from the KMJ driver and this will allow the game to see the virtual controller driver.


ControlMyJoystick allows a macro’s script or digital joystick emulation to send keystrokes to a game using the Tetherscript Virtual Keyboard Driver. You can send text with the script command ‘Keyboard (Driver)’. If you would like to set up WASD-like controls, you can setup the keystrokes in the curve configuration screen (see tutorial 09). You can also send text with ‘Keyboard (SendInput)’, but this is more easily blocked by the game.

Some games also discriminate between upper and lower case. So, even if the in-game command to toggle the landing gear looks like a capital ‘G’, you may send a lowercase ‘g’ via script command to get it to work.

As you try these keyboard script commands, you may do a DN, but forget to do an UP. This can cause your keyboard to act strangely. To fix it, just physically press and release the button on the physical keyboard.

Best to try outputting keystrokes to Notepad to see how it works. Be sure to enable profile targeting and set Notepad as the target.


ControlMyJoystick allows a macro’s script to send mouse button presses and axis position data to a game using the Tetherscript Virtual Mouse driver. The mouse script commands are ‘Move Mouse (Driver)’. You can set the mouse coordinates and set mouse button clicks with this script command. To experiment with the coordinate system, check out the Output/mouse tab and try moving the mouse to various coordinates. Be sure to check out tutorial 15 to see how to draw an ‘X’ in Microsoft Paint.

As you try these mouse script commands, you may do a Button Down, but forget to do a Button Up. This can cause your mouse to act strangely. The fix it, just physically press and release the button on the physical mouse.