You need help. Admit it.
Learn how to configure input devices, output drivers, macros and curves. It's all here.
Compatible with
64 bit version of Windows 7, 8, 8.1, 10 or 11
Connect with other users and get tips from the community.
Send us an email at support@tetherscript.com. Pre-sales and technical support inquiries are welcome.
Tetherscript Technology Corporation
Saskatchewan, Canada
Since 2011
Yes. All functions are enabled and you can try everything including creating and modifying profiles, macros and scripts and using voice commands, joysticks and 3Dconnexion controllers. The trial will function for 14 days after it first ran.
Run the trial software again and you will be prompted the enter the product key. Enter it, and presto! Your trial version is now fully registered.
Generally speaking, if you can run your game on your PC, it is more than adequate for ControlMyJoystick.
You can get the official 14-day trial installer from this website. Don t get it from anywhere else as it will not be the official, unaltered release.
Yes. It has been scanned by VirusTotal, which uses 60 different virus scanners. You can confirm this by uploading the file to www.virustotal.com and they will scan it for free. Some antivirus apps may give warnings because this is a new installation file, and it has not been downloaded by many people yet. These are typically reputation warnings. The installation file has been digitally signed by the developer of ControlMyJoystick, Tetherscript Technology Corporation.
It will install files in the folder you specify, as well as ControlMyJoystick's user-mode (not kernel-mode) virtual joystick, mouse and keyboard drivers.
Yes, because it install the virtual joystick, mouse and keyboard drivers.
You must uninstall/reinstall ControlMyJoystick, or use the install batch files in the /drivers folder where you installed ControlMyjoystick.
Right-click on the profile list and select Export or Export All . Each profile will be saved as a .cmj file. You can import these files into ControlMyJoystick using the Import function.
If you have version 5.0 or 5.1, you can copy your .cmjson files to another location using Windows Explorer.
5.5.78.50 Final February 12, 2023 (Current Version)
1) Updated app and driver certificates.
2) Minor UI fixes.
5.5.54.40 Final December 1, 2020
1) Updated the way you set themes and removed some old themes that could cause errors.
2) Removed the News tab. We just didn’t like the concept of it dialing out to get the ‘latest updates’ .txt file every now and then.
3) Added support for relative mouse movement script actions. This includes the installation of the new relative mouse driver.
4) Fixed a bug where when you attempted to bind an output/joystick axis it would also send a Hat0 buttonpress to the joystick driver. Now it no longer sends that keypress.
5) Changed the ‘enable profile target’ control to a simple checkbox along with some explanatory verbage.
5.4.17.80 Final June 9, 2020
1) Now when CMJ starts, the controlmyjoystick.xml DxWare profile is copied with a forced overwrite. Sometimes on Steam installs, this would fail, leaving DxWare behaving oddly.
5.4.17.79 June 3, 2020
5.3.45.89 January 6, 2020
5.1.65.80 April 12 2019
IMPORTANT - Make sure you export your profiles as .cmj files from your earlier version of ControlMyJoystick. In more recent versions, this was done automatically on shutdown. You should find them at: C:\Users\YourName\Documents\ControlMyJoystick. You will need to import these into ControlMyJoystick.
If you have a newer version that has .cmjson files, copy these
somewhere as a backup. If you leave them where they are, the new
version will auto-convert these profiles as they are used. But just to
be safe, backup up your old .cmjson files!
This is by far the largest feature update since ControlMyJoystick was launched around five years ago. Where to start?
LOTS OF NEW FEATURES
Note: For most output to be received by a target
app(like a game), you need to set a profile target and enable it.
Right-click on the profile picklist for this option, or use the status
bar.
Note: There is an import function to import
older .cmj profiles. If you are using .cmjson files, these will
upgraded automatically when you first select them in the profile
picklist.
USER INTERFACE
SCRIPTS
TRIGGERS
CURVES
SECURITY
WHAT IT DOESN T HAVE
VIRTUAL JOYSTICK DRIVER
VIRTUAL MOUSE DRIVER
VIRTUAL KEYBOARD DRIVER
JOYSTICK BUTTONS
BUG FIXES
5.0.6.24 January 22, 2019
IMPORTANT - Make sure
you export your profiles as .cmj files from your earlier version of
ControlMyJoystick. In more recent versions, this was done automatically
on shutdown. You should find them at:
C:\Users\YourName\Documents\ControlMyJoystick. You will need to import
these into ControlMyJoystick.
Note: This is a free upgrade. Your 4.x existing product key will work fine on this version.
Note: Update your 3DxWare10 version to 10.5.5 or higher.
This is a fairly large code rewrite. The GUI was been heavily tweaked
and the method of storing profiles has changed from a database to JSON
files. This will make it easier to maintain and add new features in the
future. If you have exported your existing profiles to .cmj files, you
can go to the new version s Profile menu/import and import them.
GENERAL
- Several tutorial profiles have been included. Yes. Finally.
- Controller button names are now shown in more readable form ( Fit instead of VK_FIT ).
- The triggers and script grids have been moved to tabs.
SIDEBAR
- Changed the UI to a tabbed interface for easier navigation and expandibility in the future.
- Changed the Threads grid to Running Macros and included it in the new Log tab.
- Logs can now be auto-backed up to the PublicDocuments/ControlMyJoystick/Logs folder. This is enabled by default.
-
3DXWare - The axis indicator gauges now show the raw axis position data
on the top, and the curve-adjusted position data on the bottom. This
allows you to see the effects of curves. By default, curves are flat so
you won t see a difference between raw and curved positions until you
modify the curve.
- 3DXWare - Curves now have an additional 4
controlpoints for better granularity, for a total of 21 (10 on either
side of center).
- 3DXWare - Curve editor has been replace with a much better UI.
- 3DXWare - Curve editor now has the digital controls on the editor form instead of spawning a separate form.
- 3DXWare - You can now create a new default curve group.
-
There is now a News tab that will show any new ControlMyJoystick news
such as new versions, etc. This checks for new news once every 30 days.
PROFILES
- Added the ability to include notes. This can be used to explain how to set up the game to use the profile.
-
Profiles now are stored as .cmjson files which are different format
from the previous .cmj files. Previous versions of ControlMyJoystick
used a Firebird database to store profiles, but this has been removed
and all profiles are now stored in JSON format in the
PublicDocuments/ControlMyJoystick/Profiles folder. This has resulted in
slightly faster performance and less code complexity.
- You can now launch Windows Explorer to view the profile folder.
- Profile backups on shutdown are enabled by default and stored in the PublicDocuments/ControlMyJoystick/Profiles/Backup folder.
TRIGGERS
- The triggers are now displayed in a more readable form.
- You can now export the trigger summary as .csv so that you can print out reference cards etc in an external app (like excel).
SCRIPTS
- The script command lines are now displayed in a more readable form.
- You can now add a "Comment" script item for documenting your script.
-
You can now add a "Change Profile" script item for making another
profile active. This allows you to break your macros, joystick buttons
and curve settings across more than one profile for the same game. So
you could have GameName - Flight Mode and GameName - FPS Mode or
something like that.
- Bugfix: Syncronous Macro s now work.
- You can now use as many nested and sub-nested syncronous and non-syncronous macros as you want.
4.4.2.49 November 11 2018 (current release)
Note: Update your 3DxWare10 version to 10.5.5 or higher.
-
Renamed the Output menu item to Joystick and submenu items for binding
Joystick driver axis and buttons. You need to ensure that you have
enabled profile targeting and set a target for the current profile. This
is an alternate method to the microphone method of binding, which you
can still do if you want to.
- Tweaked the UI in the left sidebar to make it easier to manage profiles.
- Added Tap sensitivity and min and max time between taps to the DxWare configuration screen.
-
Added a app shutdown progress indicator to let you know to wait, since
shutting down speech recognition can take a while to uninitialize.
-
An automatic app shutdown now occurs if you change the settings in the
voice configuration dialog. You will need to restart the app. This is
done to ensure proper handling of the speech recognition engine.
- Reduced the delay that could occur when switching between profiles while voice is enabled.
- Fixed a Device cannot be opened error that some users encountered.
-
You can now disable the DxWare setup commands via checkbox in the voice
tab. Disabling the setup commands when they are no longer needed will
increase the voice recognition accuracy and speed.
- Fixed the Joystick button Test menu item so that it now actually sends the simulated joystick button press to the driver.
- Added detailed error logging for 3DxWare.
4.3.0.14 March 1 2018
Note: Update your 3DxWare10 version to 10.5.5 or higher.
- Fixed bug where you would get a Error reading ttcSAPI541.Microphones.Strings error.
- Fixed bug where digital joystick character assigments would not be imported correctly.
- Fixed bug where the digital joystick would emit a character stream immediately after switching profiles.
- Fixed bug where the user interface would be scaled poorly on high-dpi monitors with Windows scaling greater than 100%.
- Removed the x0.00, x1.00, x3.00 labels from the curve editor.
- Tweaked the theme setup window to make it easier to browse the available themes.
- Removed the configurable user interface scaling options. It now scales automatically.
- Updated to the latest code-signing certificate.
4.2.1.35 Jan 11, 2018
Note: Update your 3DxWare10 version to 10.5.4 or higher.
-
Profiles are now automatically exported to the
MyDocuments/ControlMyJoystick upon app exit. The profile filenames do
not have a timestamp, so this is not a full history of changes to the
profile, but rather a snapshot of the most recent changes.
- Fixed crash that occurred when you double-clicked on the application close button X in titlebar to shutdown the app.
-
Added a Demo mode for Steam releases. Steam Demo s are restricted to a
maximum of two macros per profile and the profile import function is
disabled.
4.1.61.97 Dec 15, 2017
Note: Update your 3DxWare10 version to 10.5.4 or higher.
- Updated the ControlMyJoystick.xml that is installed to reflect changes in 3DxWare 10.5.4.
- Fixed bug that prevented you from having more than one left-panel open at the same time.
- 3DxWare is now enabled by default. If no controller is found the app runs normally.
4.1.20.20 Dec 4, 2017 (Current Release)
- Fixed bug that could give a cannot find drive e: error on startup on some computers.
- Now when the app starts the ui no longer briefly flickers white.
- Now when you change the UI scaling in the view menu you will need to restart ControlMyJoystick for the changes to take effect.
- Changed name of app to ControlMyJoystick from Testerx so that it is displayed correctly in 3dconnexion utilities.
4.1.20.18 Nov 25, 2017
- Fixed a bug that would give error Device cannot be identified on app startup.
4.1.20.17 Nov 22, 2017
-
Added additional bug reporting functions so that you can email an
automatically generated bug report to us for troubleshooting purposes.
- Changed the menu item Help/Online Manual to Help/Knowledge Base so that it points to the new ControlMyJoystick website.
- Fixed hang that occurred when application is set to stay on top and you go to the help menu and un-register the product key.
4.1.19.65 Aug 24 2017
- Changed voice threshold default from 92 to 70 to allow better recognition for non-english languages.
- The voice command list is now automatically updated when you add a voice trigger.
- Added the W and w key to the Editing Digital axis negative and positive key dropdownlists.
- Reduced delay encountered when switching to a different profile with voice activated.
4.0.5.91 July 17 2017
-
Added TCP/IP Triggers. This allows you to connect to ControlMyJoystick
with a TCP/IP app and receive a list of TCP/IP triggers for the
selected profile. You can then send commands back to fire the triggers.
- Added a TCP/IP remote utility that can be launched from the tools
menu. It connects to your TCP/IP trigger server and displays the
triggers as buttons. When you click on one of those buttons, the
trigger is fired in ControlMyJoystick.
- Fixed a bug where the registration splash screen would remain hidden
behind the main screen if stay on top was enabled and the app was still
in evaluation mode.
- You can now create a folder from the export profile dialog.
4.0.4.67 Jun 30 2017
- The full app version is now displayed on the titlebar.
- Exporting and backing up profiles now checks whether the save-to path
is valid and tries to re-create the directory if it is missing.
- Fixed a a bug where an exported profile could cause the script to be saved in the wrong sequence.
- You can now duplicate a macro along with it s triggers and scripts.
- You can now automatically switch to the game when sending control
inputs to it. This allows you to run a game in windowed mode and when
necessary, use another app (browser, email etc). When you execute a
macro or move the 3Dconnexion controller, the target window will be made
active before the commands are sent to the game. This eliminates the
need to click on the game again before sending ControlMyJoystick
commands and axis data to the game. It s great if you need to
multi-task on multiple monitors when gaming. In the profile menu,
select Edit Target and select the game window title in the list. You
can enable targeting for all profiles by checking the Enable Targets
in the profile menu.
- You can
now mute voice commands with a controller keypress. This is useful if
you don t use a voice prefix and don t want a regular conversation to
accidentally trigger a macro. You can configure this in the Input/Voice
menu. When muted, a large red Voice Muted banner is displayed above
the macro list.
- The log now only shows the most recent 500 lines.
4.0.3.15 Jun 29 2017
- Fixed a bug that happened when you clicked on the Macro run button, which would not run the macro.
- Added a Trigger Summary panel on the sidebar which shows a quick reference command reference for your macros.
- You can now export one or more profiles to a .cmj file format. Use
this as a way to back up or share your profiles with other users.
- You can now import one or more .cmj files. Use this as a way to restore backed-up or shared profiles.
- You now set up an automated profile backup which occurs when shutting
down the app. Check out Backup under the profiles menu.
- Added a way to select a microphone in the voice configuration screen.
- You can now send special characters in digital joystick mode like right arrow keys etc.
4.0.2.56 Jun 18 2017
- Fixed a bug where the digital joystick TX, TY and TZ axis would not respond to inputs.
- Fixed a bug where the digital joystick would not respond on the RY axis if the RX digital was not enabled.
- The full version and build number is now shown on the app titlebar.
- The full version is now stored along with the profile in the database for a future import/export function.
4.0.2.17 June 8, 2017
- Fixed a bug where sometimes you could not clear the WASD configuration.
4.0.2.0 June 7, 2017
-
Added WASD support for 3Dconnexion controllers. This allows you to use
the controller as a digital joystick. Configure it by clicking the new
Digital... button in the curve editor.
4.0.1.37 June 5, 2017
-
Fixed bug that would cause a slowdown when adding new macros or
deleting existing macros. The delay was caused by the resetting of the
speech engine.
4.0.1.35 June 4, 2017
- Fixed bug that caused the pause script command not to work if the computer has been up for more than 15 days.
- Fixed bug that caused the voice config screen disable system commands
and test mode checkbox settings to not be remembered properly.
4.0.1.33 June 3, 2017
- Fixed bug that cause some script commands to be enabled when a macro did not exist.
- Added a resizer area on the lower-right hand corner of the screen to make screen resizing easier.
- Enabled the snap-to functionality of the main window so that it will snap to the monitor edge.
- Fixed bug that caused the joystick panel axis positions to not update unless the 3DxWare panel was also open.
4.0 - Released May 20, 2017
This
upgrade adds support for the SpaceMouse Pro and Enterprise, use of
controller buttons and UDP triggers, and the sending of mouse and
keyboard commands via script, along with many new script commands.
USER INTERFACE
- You can now scale the user interface from 100%, 125% and 150% in the view menu.
- You can now change the theme brightness.
- You can now set the the app to stay on top.
- You can now launch a magnifier to be able to see small UI details.
- Replaced the tab-based UI with a sidebar-based one.
3DXWARE CONTROLLERS
- Be sure to update to the most recent version of 3DxWare.
- You can now use the SpaceMouse Pro and Enterprise in addition to the previously supported Navigator.
- You can now map any button on the controllers as a trigger.
- You can now enable smoothing to reduce the jitters caused by your hand.
- You can now specify a curve preset for each axis.
- You can now switch between curve groups with voice commands and controller buttons.
PROFILES
- You can now duplicate an existing profile.
- You can now see which macros are running and can terminate one or all of them.
- You can now use voice, controller button up/down/updown states and remote UDP commands as triggers.
- You can now do the following script commands:
- Joystick Button down/up/downup
- Keyboard button down/up/downup
- Mouse button down/up/downup
- Pause (for x milliseconds)
- Play Sound (.wav files)
- Set Axis Curve Group (landing, combat etc)
- Loops (for x iterations)
- Launch other macros (synchronous and asynchronous)
- Run a file (a batch file perhaps)
- Send data via UDP (to another app)
- Stop running all macros
- Move the mouse cursor
TOOLS
- Added app for testing the SEND_UDP script command.
- Added app for testing the UDP trigger.
Version 3.2.0.6 Released January 3, 2015
Bug: Fonts in dialogs for inputting names, values are too small. *Fixed.
Request: Now enables/disables the axis labels in the driver status panel when translation/rotation is enabled/disabled.
Request: Added voice command to reset buttons only.
Request: You can now have more than one axis mode configurations, each
with it s own voice command. So you can now have a set of curves for
landing, and another set for regular flight, etc.
Request: You can now copy a curve to another curve.
Request: You can now navigate to all six axis within the axis screen,
so you don t need to close the screen before selecting a different axis.
Bug: Sometimes buttons remain pressed, as shown on the driver status display. *Fixed.
Request: Removed the user interface buttons from the profiles and
button lists. You can now access those functions via right-click menu.
Request: You can no longer delete the last profile. If you do, it will create a default profile.
Version 3.1.0.27 Released December 23, 2014
BUG:
Add(button) to Script button not working. Fixed. This has been
removed. You can now add the currently selected button to the script
with the Add button in the script panel.
BUG: Can t add a button to an existing script. Fixed . You can now add
the currently selected button to the script with the Add button in
the script panel.
BUG: Language accents not recognized by speech recognition. Fixed.
BUG: BUTTON_UP and BUTTON_DOWN commands toggle the button state, but they should not. Fixed.
REQUEST: Need a way to temporarily reduce or increase axis sensitivity.
Fixed: Added a Axis Sensitivity Low voice command to set
sensitivity at 30% of the curve. Added a Axis Sensitivity Normal
voice command to set sensitivity at 100% of the curve. Added a
Axis Sensitivity High voice command to set sensitivity at 200%% of the
curve.
REQUEST: Add script
command to play mp3 or wav. Fixed. You can now add a sound (mp3 or
wav) as a script command with the Add button in the script panel.
REQUEST: Need to be able to toggle a button. Fixed. A new script
button state BUTTON_TOGGLE has been added. Just double-click on the
button script command to change the state.
Version 3.0.0.537 Released December 17, 2014
This is the initial public release of ControlMyJoystick.
Some tips:
1) After startup, go to the setup tab and select a suitable skin.
2) Go to the help tab and read the help.
3) Study the included profile for Elite: Dangerous.
4) Watch the tutorial videos on the website.
Then make your own profiles, and have fun!
Your product key grants the purchaser of the key a perpetual license for ControlMyJoystick version 5.x. This key can be used on subsequent upgrades to version 5 (ex. 5.1, 5.2, 5.3, 5.4, 5.5, 5.6 etc) and can be used on up to three computers owned by the purchaser. So if you have a laptop, notebook and a desktop, you can use the same key on all three computers.
No.
No. The product key does not expire and you do not need to pay additional fees to continue using the software.
You need to purchase a product key to unlock the 14-day trial version. When it is unlocked, it no longer has the 14-day limit and all functions are fully enabled. You can use the same product key on up to three computers that you own.
You can easily order through our secure online store, which is hosted by FastSpring, our reliable and secure eCommerce provider located in California, USA.
When you purchase ControlMyJoystick, you will receive a Product Key via email within minutes of your order. The product key will also be displayed on the order screen.
The payment methods available vary depending on which country you are in when you order. Options include:
Check your spam and junk folders. Allow up to 15 minutes for key delivery by email. If you did not receive it, it could be that you used an incorrect email address while ordering. Contact our support and we will send you the key.
Yes. If, within 60 days of your purchase you are not satisfied, we will refund your purchase. We only ask that you give us a chance to resolve any issues you have with the software first.
We are happy to answer any questions, bug reports or observations you may have. Just email us at the address listed near the top of this page in the Contact Us section. You don't need to create an account or have purchased the software to create a support ticket. When we respond to your ticket via email.
We also have a community forum where you can ask your question or search for answers.
Be sure to be specific as possible, and if you are experiencing problems with the software, include your operating system (ex. Win10 64 bit), hardware info (ex. laptop with a SpaceNavigator). Tell us your ControlMyJoystick version (it is displayed on the titlebar at the top of the ControlMyJoystick screen), and whatever details you can. The more info you provide, the better we can assist you.
3Dconnexion creates six-degrees-of-freedom controllers for the CAD and graphics industry. They are widely used by engineers and designers because the controllers allow them to easily navigate 3D space in their favorite CAD programs. These are solidly built and very accurate. They are not a cheap joystick-like controller, that s for sure. The accuracy and solid build makes these controllers excellent for gaming.
No. But we support their efforts to make their controllers more accessible to developers through their excellent SDK and support. We don t sell controllers either. We just enjoy using them.
No.
You can use any controller which is supported by 3Dconnexion s 3DxWare10 software. Here is the list:
Video: https://www.youtube.com/watch?v=TNrG1mvebZI
Video: https://www.youtube.com/watch?v=4xJSTrZt1o8
You can optionally use a 3Dconnexion controller as a source of triggers and axis data. They have been selling these for years for use with CAD and other 3D design apps, and they are really nice to use for games - especially where six degrees of freedom is needed: up/down/right/left/forward/backward plus rotation around all axis. Let s take a look at what is involved with getting these controllers to work with ControlMyJoystick and games. From here on it, we ll refer to them as controllers .
You must install the 3DxWare driver software, which is available from the 3Dconnexion website. This software has some good practice apps so you can get to a feel of how to use the controller. It also has a Menu app that pops up when you press certain button on the controller. This Menu app can be used to configure the controller for use with an application. You tweak axis orientation and sensitivities and remap the buttons to perform different actions.
For each app you are running when you open the Menu, the Menu app will use an existing .xml from this folder:
C:\Program Files\3Dconnexion\3DxWare\3DxWinCore64\Cfg
or it doesn t exist, a new .xml file will be created in:
C:\Users\UserName\AppData\Roaming\3Dconnexion\3DxWare\Cfg
If you go to a game and use the controller and it s Menu app, it will create a new .xml file if it does not already exist. Take a look at the .xml file and you will see definitions for axis sensitivities, button mapping and more. You can manually edit the .xml file or use the Menu app to modify the settings in the file.
3DxWare installs a 3DConnexion KMJ driver (Keyboard, Mouse, Joystick). This allows the controller to emulate a keyboard, mouse and joystick. You can see it working if you use the Chrome browser and find that you can scroll with the controller. It is reading the Chrome.xml and sending commands to Chrome. The main limitations for using it in-game are:
You still need to install the 3DxWare driver. And when you install ControlMyJoystick the installer will add a controlmyjoystick.xml to the following folder:
C:\Users\UserName\AppData\Roaming\3Dconnexion\3DxWare\Cfg
This controlmyjoystick.xml file holds critical configuration settings to allow it to be used as a joystick. ControlMyJoystick also allows you to:
The install also adds a Tetherscript Virtual Joystick driver. ControlMyJoystick will take controller axis data, apply curves to it, and then pass it through to the Tetherscript Virtual Joystick driver. Then game then needs to read the joystick axis and button data from this driver. This can be tricky because the game may be able to see both the KMJ driver as well as the Tetherscript Virtual Joystick driver.
You can either disable the KMJ driver (not a great solution, since you may want to use the controller for something else, like CAD), or you can use ControlMyJoystick s special voice-activated axis binding commands or the non-voice binding commands in the Joystick menu. This will ensure that the game is listening to the Tetherscript Virtual Joystick instead of KMJ.
In ControlMyJoystick, go to the Input menu, and select the 3DxWare item. This will bring up a configuration screen:
You’ll see the 3DxWare being initialized in the log tab as shown below:
Sidebar Panel
Try moving the controller puck and you will see the axis indicators move in the 3DxWare sidebar panel. Take notice the vertical lines showing the axis positions. It’s going to look a bit different once we set a curve for an axis.
Curve Groups
When you create a profile, a Default curve group will be created and all your curve edits will be in that group. You can rename the group, or create a new group by right-clicking in the curve group list. You can switch between groups by clicking on a curve group or by changing it with a script command. So, by using your voice or a controller button, you can change the active curve group and use different curves. This is very useful for different phases of a game, such as landing or combat. See tutorial 05 for more info.
Axis Curves
Double-click on a curve, in this example, TX (Translation along the X axis) to bring up the curve editor. This will edit the TX curve. These curves are what really makes using the 3Dconnexion controllers in games a real treat. To adjust a curve, click and drag one of the control points which is located along the curve line. You can t remove or add control points. The curve shown above is a preset available from the Curve Presents button. You can tweak this curve and you can reset it with the Reset Curve button.
Try moving the controller puck along the RX axis (move the puck from side to side or left to right). The un-curved axis data is represented by a small tick at the top of the axis indicators, and the curved data that will be sent to the virtual joystick driver is shown as a longer tick at the bottom. Try modifying a curve or invert it, and you will see how it works. You can also edit the curve while the game is running, so if, for example, an axis is too sensitive, you can bring up ControlMyJoystick and adjust the curve, then swap back to the game to test it out. No need to restart the game or ControlMyJoystick
Go to the View menu, and select Themes. Select the a theme from the list and optionally adjust the hue, saturation and brightness. Clicking on Reset to Defaults returns the hue, saturation and brightness to default values. The default theme is Material Dark.
Go to the View menu and select Magnifier. This zooms in on the area under the magnifier to make small text easier to read. To change the magnification level, or to close the magnifier, right-click on the magnifier and select from the pop-up menu.
Go to the View menu and select Stay on Top. This causes ControlMyJoystick to remain visually in front of all other running applications. By default this is disabled.
Go to the View menu and select Tooltips to enable the short display of a UI element description. Once you are familiar with the program you can uncheck this option. By default this is checked.
Here is a video showing how to tweak the user interface.
ControlMyJoystick accepts triggering actions by microphone (voice commands), 3Dconnexion controller, joysticks and 3rd Party App Triggers. When a valid trigger is detected, a macro executes one or more script commands. The script commands can send keyboard keystrokes, mouse movements and button presses and joystick axis and button presses to a game. You can also send a command via network UDP to a 3rd party app.
Your physical 3Dconnexion and joystick device axis data is adjusted by user-defined curves then passed through to the Tetherscript virtual joystick driver, where the data is consumed by the game as joystick axis and button data. Scripted keyboard keystrokes, mouse position and button press data are send directly to the game Tetherscript virtual keyboard and mouse drivers.
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.
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 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.
ControlMyJoystick s voice control uses Microsoft s built-in Speech Recognition to recognize your words spoken through a microphone. Once a valid word or phrase is recognized, you can have ControlMyJoystick run a macro that can sends keyboard, joystick or mouse commands to a game. For example, you could have a voice command of Landing Gear that, when spoken, causes the landing gear to deploy in-game.
Use a good quality microphone. The microphone you would use for in-game voice chat would work just fine.
You can specify a voice command prefix. For example, you can set the prefix to computer or a word of your choice and then when you wanted to activate the landing gear, you could say Computer Landing Gear .
You can also set the the threshold setting in the Voice Configuration screen to make it more accurate. A threshold of zero reduces recognition accuracy, while a threshold of 94 is the maximum accuracy, although the max useful threshold will vary, depending on the microphone, voice characteristics and language. So start at zero and experiment with higher values until you get the max accuracy.
In the Voice Configuration screen, you can set a 3Dconnexion controller button to enable/disable recognition for when you know that you do not want recognition active.
You need to go through the Microsoft Speech Recognition setup and training. This critical step is needed to ensure the best accuracy. After a while, it will get more and more accurate as you use it more.
ControlMyJoystick is really meant to be used with voice commands, and optionally a 3Dconnexion controller or joystick. You can use voice commands to bind the 3Dconnexion controller in most games, and you can also bind by using the Output/Joystick menu.
You can use one more physical joysticks in ControlMyJoystick as a source of axis and button data. You can use this data to trigger macros or apply a curve to the axis data and send it to a game. See the video below for more info.
A profile is a collection of macros, curves and joystick button definitions that you have created for a specific game. You will typically have one profile per game.
When you want to play a game, you start ControlMyJoystick and then click on the game profile in the list. You can start the game before or after you have selected your profile, and you can switch to another profile while the game is running. So, for example, in the profiles list above we have DOTA 2 Normal which you may typically use. But you also have a copy of that profile with some changes. Just click on DOTA2 Tankage and you are now using that profile.
You can manage your profiles by either right-clicking in the profile list, or by clicking on the Profile menu.
To back up your profiles, click on Backup and each profile will be saved as a .cmjson file. You can then later re-import these by dropping those files in the Profiles folder. You can find this folder by selecting Explore in the menu.
An Introduction to ControlMyJoystick
A profile can contain one or more macros. A macro consists of one or more script commands and one or more triggers. When the macro is triggered, the macro will run and each script command will be executed. You can run multiple macro s simultaneously and even have a macro call other macros. This allows you to create simple or complex game automation.
In the example above, you may want the Fire macro to run when you speak the voice command fire . This would execute one or more script commands that would send keystrokes, joystick button press, or mouse button presses to the game to cause the ship to fire it s weapons.
Concurrent Macro Execution
If you put an exclamation mark ‘!’ at the end of a macro name, it means that only one instance of this macro can run concurrently. This is useful if you accidentally spam a trigger that launches a macro so that you wind up with the same macro running in separate threads, giving odd results. Prevent this problem by using a !. You can see the difference in the two macro names below:
You can manage your macros by either right-clicking in the macro list, or by clicking on the Macro menu.
A macro can contain one or more triggers. A Trigger is something that would cause the macro to run. Examples of triggers are voice command, TCP/IP remote utility, joystick or 3Dconnexion controller keydown/keyup/keycombo or externally generated app triggers. You can manage your triggers by either right-clicking in the trigger list, or by clicking on the Trigger menu.
A macro will usually only have one trigger, but you could have more. It is possible to have the same trigger for different macros. In that event, when the trigger is detected, the first macro (listed alphabetically) will fire and the rest of the macros with the same trigger data will not. Here is an example of triggers configured to run a macro. If either one of these triggers occur, the macro will run.
A macro can contain one or more script commands. When a macro is triggered, each script command is executed in order from top to bottom. Script commands typically send joystick button presses, keyboard key presses, mouse button presses and mouse axis data to the game.
Some script commands don t send anything to the game and are used to pause, create loops, run other macros, change curve groups, run a batch file, play a sound or even send data via network UDP to another app.
Here s a script with all possible script commands used, for illustrative purposes only.
You can have as many commands as you like as there is no upper limit on how long a script can be. The following is a complex script that opens a game menu, does a series of mouse clicks and then closes the game menu.
If you right-click on script list, or click on the script add button, or click on the Script menu, you will see the following menu.
Before you use joystick button script commands, you should define your joystick buttons in the joystick button list, which is located under Joystick in the sidebar. Just double-click on the joystick button needed and type in the name.
Now when you select a joystick button for this script, it is labeled Landing Lights instead of just appearing as 1 . You can configure up to 128 joystick buttons, although some games may support fewer.
You can send individual keyboard_down and keyboard_up commands to the game. You will need to keep track of which up and down commands you are sending.
If you were to send a keyboard_down and don t send a corresponding keyboard_up, the operating system will still think that key is still pressed and some apps will act a bit odd. To fix it, just physically press and release the key on keyboard.
You can also send a string of text to the game such as might be used in a chat window by using the keyboard_text command.
Tutorial video showing how to send text.
Video: https://www.youtube.com/watch?v=wuaSAY3qC-M
Some games, although you map for example the key P , really will only respond to a scripted lower-case p . So try different cases if it doesn t seem to be working. Some keys can t be sent to games, and some games will only recognize certain keys, so you need to experiment to find the right setting for your game.
You can send mouse button down and up commands to the game. If you do the down/up combo, the down delay is built-in and determined by the operating system. If you do just a down, then you will need to add a pause before issuing the up. If you issue a down, but not an up, the game and other apps could act as if the button is still pressed and act strangely. To fix, just physically press and release the mouse button.
You need to ensure that ControlMyJoystick sends it s commands (keystrokes, mouse movements and clicks) to the game and not some other window such as your web browser. You can use Profile App Targets to accomplish this.
Note: Once you have set the target app and enabled targets, all ControlMyJoystick commands will be sent to the target window. For easy testing, open Wordpad and set it as the target.
Why not Notepad?
We recently changed our recommendation from using Notepad to using Wordpad instead for keystroke testing. This is because Notepad has been changing with recent Win10 releases and causing problems. Recent versions of Notepad will change the Notepad titlebar text to prefix it with an *asterisk when it has been edited, which invalidates the CMJ profile target and for some reason eats some keystrokes, often leaving you with a repeating keydown action. Wordpad doesn’t do this, which makes it easier to test.
Right-click on the active profile to bring up the popup menu, or double-click on the target name at the bottom of the screen. Select the target program from the list.
Slide the profile targeting switch to the on position.
You can apply a curve to controller axis input data to modify it for best results in-game. See the tutorial video below for more info.
You can use a controller in WASD-like manner for scrolling games. See how to set it up in the video below.
You can get the same remote trigger functionality by running the TCP/IP Remote utility from the ControlMyJoystick Tools menu. This is a separate Windows app that you can put on another monitor.
You will need to click on the macro buttons with the mouse. You can run up to three instances simultaneously and set them for different DeviceIDs so that each window displays different macro buttons.
The utility connects to the ControlMyJoystick TCP/IP Trigger Server via TCP/IP protocol on your network. In ControlMyJoystick, you configure the TCP/IP Trigger Server to listen on an IP Address and port, and then you enable the server. In the utility, you set it to connect to the same address and port and then connect to the server. Any TCP/IP triggers configured for the current profile will be displayed as buttons. Click a button to run a macro back in ControlMyJoystick.
Create a profile, add a macro and create a trigger for that macro by selecting TCP/IP... from the Trigger menu. You will need to set the text, colors, order and DeviceID for that trigger. This trigger will appear as a button in the remote utility.
In ControlMyJoystick, select Configure TCP/IP Trigger Server from the Trigger menu. You will need to set the Bind Address and Port and then enable the server. Any server status information or errors will be displayed in the sidebar, so it is a good idea to open up the log panel and clear it now. You will likely need to tell your firewall to allow TCP/IP connections to the address and port you have specified. Note: This configures the server for all profiles, not just the current profile.
Run the ControlMyJoystick TCP/IP Remote utility. Open the settings screen.
The trickiest part of setting this up is to select the correct IP address and port and ensure that the remote utility can see the TCP/IP Trigger Server on the network. Check the ControlMyJoystick log for any error messages. And don t forget about firewalls. There s Windows firewall, and often other firewalls that antivirus apps are running. You may also have a firewall in your network router.
ControlMyJoystick can receive triggers from external apps. It can also send commands to an external app when a macro is run. This allows you to extend ControlMyJoystick s functionality, such as running a macro from another tool, or turning on a physical light when a macro is run.
All communication between external apps and ControlMyJoystick is via network UDP protocol. So you need to make sure that the address, port and UDP protocol is allowable in your firewall. If it doesn t seem to be working, check your firewall.
That is a good question. Since UDP is a stateless or connection-less protocol, it is very fast. UDP also cannot guarantee that UDP packets will arrive in the order in which they were sent, but this shouldn t be a problem for how we are using it. You really only need to send a single byte to or from ControlMyJoystick, so any lost or out of order packets should be pretty rare. And if it is lost, it isn t a critical thing..like not nuclear reactor critical at least (please do not interface ControlMyJoystick with nuclear reactors, k?).
You can add a UDP trigger to a macro. This trigger will fire and run the macro if it receives a user-defined series of data. See the Trigger help for more info on how to configure this trigger and on how to set up the UDP Trigger Server.
You can add a Send UDP script command to a macro so that when a macro is run, a user-defined series of data bytes is sent to an address and port somewhere on the network. What the receiver of that data does with it is up to the developer of that receiver app. Turn on a light? Play some music? Trigger a device? I am sure someone will build something great!
You can run a batch file with the Run File script command. Within the batch file you can use any batch command, so you could launch an app, copy a file etc.
Here s a video showing how to integrate with external apps. This vid is showing an old version, but the setup is the same as in the current version.
ControlMyJoystick can send virtual joystick axis data, keystrokes and mouse button clicks/movements to Star Citizen. Using a six-degree-of-freedom 3Dconnexion controller is perfect for space games, and Star Citizen is no exception.
Configuring ControlMyJoystick (CMJ) and Star Citizen (SC) is pretty simple, providing you follow the method outlined below. This article covers how to bind your controller axis and buttons to SC. It does not cover how to send keystrokes or mouse clicks.
New to using 3Dconnexion Controllers in ControlMyJoystick? Read these Knowledge Base articles first.
- About the 3DxConnection controller and it s configuration in ControlMyJoystick
- About app targets
- About the virtual joystick driver and 3dconnexion driver conflicts
The secret to getting it working is to use CMJ voice or menu commands to bind the axis to the controller in-game. Don t touch the controller while binding. If you do touch it while binding it will not bind correctly. This is explained further below.
Let s bind the Pitch, Roll and Yaw flight axis and a controller button to bring up the in-game scoreboard while in flight.
Plug in the controller and confirm that it is working with the utilities that came with 3DxWare drivers that came with it.
At this point, CMJ is running, the controller is responsive and the voice commands are working.
First we will unbind a bunch of axis-related items.
So now in SC, no yaw, pitch and roll is bound to any joystick input. Return to the game and move around the controller. It should not pitch, roll or yaw. If it does, you missed something in the steps above.
Let s take a look at what happening in SC. Even though we disabled all joystick inputs, SC can still receive inputs directly from the Spacemouse driver. We have no idea why this is possible, but it is the cause of most of the frustration in setting this up. It could be that there is a hidden Joystick/HOTAS0 that we can t unbind. So we are stuck with this, and it s the reason we need to use voice commands for binding the axis.
To see this problem in action(it s good idea to try this as it will help make sense of it all), try this:
We ll use CMJ voice commands to send the binding data through the CMJ virtual joystick driver. Our hands will never touch the controller as we do this.
Now return to the game with only pitch configured. Just doing one axis for now will make the next steps easier as we don t want axis cross talk messing up our configuration changes. Try pitching up and down with the controller. The ship should pitch up and down, though it might be inverted. That ok, we can fix that in CMJ.
Let s try inverting the pitch, tweaking the axis response curve and deadzones.
So now we have bound a controller axis through CMJ in SC. Time to tweak that curve so that it has a smoother response.
Use curves to adjust the axis responsiveness and deadzones to limit the cross-talk among axis. With no deadzone, just touching the controller with your fingertip will cause axis movement on pretty well all six axis. This will make controlling your ship difficult.
Add a deadzone so that you can actually just touch the controller or rest your hand on it without it generating any axis inputs. Use Trim to fix a controller that always seems to be off-axis a bit even though you are not touching the controller, giving you a constant pitch etc.
The deadzone and trim values are based on a controller axis input range from -328 to +328. That is the granularity or precision of the data that we get from the controller driver. So that s 656 positions for each axis. Since the controller puck moves over a very small physical distance, this is plenty of precision unless you have the steadiest hands in the world. So if you set a deadzone to 100, that means that the center 100/656 or %15 of the physical movement range is deadzone and CMJ will report the axis position as centered throughout this range.
In CMJ, you can see the raw axis data coming in from the controller and the adjusted (curved) data being sent to the CMJ joystick driver. This is really useful for learning how the curve editor works without having to go into the game.
Go and bind the other axis with your voice commands and tweak the curves.
Your ship should now be flyable with your bound axis. You can also bind the Tx, Ty, and Tz to thrusters to allow lateral, forward/back and vertical movement respectively.
One set of axis curves seldom is adequate for all flight scenarios. Up to this point, you have been editing the curves in the Default Curve Group. This is shown in the grid just above the axis grid in the 3DxWare panel. The settings for the six axis are contained within the Default group and you may use these for combat, for example. But what if you want different curves general non-combat flying around?
You can create a new axis group for that and then switch which group to use while in-game. So if you are in-game and just flying around using one group and combat is imminent, you could use a CMJ trigger such as voice or a controller button to change to the combat curve group.
In the curve editor indicators, you may have noticed that your hands are a bit shaky an even though you may try to hold your hand and the controller puck perfectly still, it is pretty well impossible and it will move around a bit. If you don t want this shakiness sent to the game, go back to the Input/3DxWare menu and enable Smoothing with a depth of 2 or 3. Any higher will cause noticeable controller lag but be really smooth. 2 or 3 is usually enough. Close this window and go back to the curve editor and move the controller around. You should be able to hold it pretty still now. You will see that it lags a bit though.
This also uses voice commands. Don t touch the controller while doing this. Let s bind a button on the controller to bring up the scoreboard in-game.
You could also bind a keyboard key or mouse button in SC instead of using a joystick button to bring up the scoreboard. In the script, just send keystrokes instead and use profile app targeting while gaming in windowed mode. You ll need profile app targeting enabled for this to work while windowed gaming though. Some games ignore keystrokes sent by other apps though, so this may not always work. But the virtual joystick driver is seen as a real physical joystick, so it won t be ignored.
You get an OLE Error when you start up ControlMyJoystick. It usually mentions the microphone.
This error occurs if you do not have speech recognition set up in the Windows Control Panel. To set up speech recognition, you may need to install a language pack from Microsoft for your language. Then you need to train the speech recognition engine. When you have that working, run ControlMyJoystick again and enable the microphone and try voice commands.
If ControlMyJoystick crashes, this window is displayed along with a lot of good debug information instead of a cryptic windows error message. Our developers can use this information to troubleshoot the issue and get it fixed.
To see this window without having to wait for a bug to happen, you can force an error by going to the help/about menu item and opening the about window. Press F12 on your keyboard and it will generate a harmless error and cause the debug window to come up.