0
Latest Version

ControlMyJoystick

The Tool

No Credit Card or Email Required

Release Notes

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?

  • FREE UPGRADE for registered users. Just use your Product Key and you are good to go.
  • INSTALLATION You must uninstall previous versions of ControlMyJoystick, so be sure to backup your profiles somewhere as they can be imported into the new version. The reason for the uninstall is that new drivers will be installed with the new version that cannot be used by the previous version. Also, previous versions cannot use the new drivers. If you installed over top of the old version, the new drivers should replace the old drivers and the new version should work, but the old version will not work properly.
  • 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.
  • Update your 3DxWare10 version to 10.5.5 or higher if you are using a DxWare device.

LOTS OF NEW FEATURES

  • You can now accept input from one or more physical joystick devices and apply the usual smoothing and curves. This is in addition to the existing DxWare device input.
  • You can now map the various buttons and axis from physical joystick and DxWare inputs to the output virtual joystick driver axis and buttons.
  • Added a VIRTUAL KEYBOARD DRIVER, which is way more reliable then the old SendInput method. You can still use SendInput, but after you use the driver, you won’t want to. This emulates a physical keyboard and it can do tons of stuff. Note: We don’t read keystrokes from the keyboard driver. We only send data to the driver so that it can appear as physical keystrokes.
  • Added a VIRTUAL MOUSE DRIVER, which is also more reliable than the old SendInput methods.
  • Refined how you bind output axis and made it more likely to be ‘seen’ by games.
  • Greatly reduced CPU usage.

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

  • You will notice new Input and Output tabs. In the Input tabs you set which DxWare or physical joystick devices you will accept input from. In the Output tab, you will map those inputs to the output virtual joystick driver.
  • Axis and button gauges for input devices now show curve alignment and the raw and curved values.
  • Added a statusbar at the bottom of the screen to show whether or not profile targeting is enabled, the delay, and the target.
  • Now if you add the three characters [!] at the end of a macro name, only one instance of this macro can run concurrently. This is useful for longer macros that you don’t want to accidentally trigger again before it has finished running.
  • Added keyboard driver editor dialog buttons (‘Edit…’) to the curve digital joystick dialog so now it easier to compose scroll commands.
  • Added on profile targets enabled switch to the statusbar so you no longer have to go to the menu to enable/disable targeting. Removed the ability to enabled/disable this from the menus. It is not profile-specific, so it didn’t really belong in the profile menu. This setting is used for all profiles.
  • You can now toggle the enabled/disabled state of macros, triggers and scripts by selecting a row in the grid and pressing the spacebar on the keyboard.
  • Tweaked the profile target functionality so now you can set the delay that occurs immediately after the target app is activated. This delay is set in the profile target edit window, and is used to give the target window enough time to become active. A small and simple window like Notepad may only take 10ms, but a larger running game window may take 50ms or more before it is ready to accept commands from CMJ.
  • Now if you hold down the keyboard shift key when starting ControlMyJoystick, it will launch with profile targets, voice and DxWare disabled as well as reset the layout to 1024×720 on the main monitor.

SCRIPTS

  • Added a ‘Reset Drivers’ item.
  • Nested scripts now work properly.
  • In the new Keyboard (Driver) option, all DOWN_UP, DOWN and UP keystrokes are done in the same dialog. You can also enter text and press the ‘Test’ button to send it to the targeted app.

TRIGGERS

  • You can now receive triggers from physical joystick devices as well as DxWare devices. It is very customizable – you can literally do a device button combo by pressing buttons across different input devices if you wanted to.
  • You can now have cross-device button combinations as a trigger. Think pressing button one on this joystick, button two on that joystick, and the Fit button on a DxWare controller to trigger a macro. We’re sure someone will find a good use for this.

CURVES

  • You can now apply smoothing and curves to input joysticks.
  • In the Digital Joystick option, you can now specify one or more keystrokes, so it should be possible to do something like CTRL-F7 or something like that instead of a single key. To experiment with the keystrokes needed for your game, try launching the keystroke editor from the Output/Keyboard tab and experiment there.
  • You can now use the Prev and Next buttons to change the current axis instead of having to close the curve dialog.
  • There is now the concept of curve alignment when editing a joystick curve. Axis curves that spring back to center should be set to Center alignment. Use Left or right alignment for joystick slider and dials. Yes, you can now curve a throttle axis!
  • There are now more curve presets to choose from.
  • You can now run a script triggered by axis movement. It’s kind of like Digital WASD, but with macros. See the new ‘Tutorial 16 – Digital Controller Axis Triggers’ for a demo.

SECURITY

  • We never have and never will use ‘hooks’ to read mouse and keyboard output. We don’t monitor your keyboard. Period.
  • Our drivers or fully cross-signed, legitimate drivers that we have developed in-house for use with ControlMyJoystick. No reduction of Windows security is required to install these drivers.
  • Because the keyboard driver is so flexible, be careful when running scripts that you gotten from someone else. You can literally launch a command line or web browser and type stuff in and do pretty well anything you can do with a physical keyboard. So, never run an unknown without reviewing it first.

WHAT IT DOESN’T HAVE

  • ControlMyJoystick does not have a way to read memory or screen pixels, or relay axis and button data from a third party app to the ControlMyJoystick virtual drivers. This kind of functionality is typically used by cheat-bots and we do not condone this use, or provide a way to do so.

VIRTUAL JOYSTICK DRIVER

  • You can view the driver output in the Output/Joystick tab.
  • Dial, Slider, Wheel and Hat Switches are now supported.
  • You can now map input axis and buttons to the output joystick driver axis and buttons. By default it is mapped to DxWare, but if you double-click on an axis you can remap it to something else.

VIRTUAL MOUSE DRIVER

  • You can set absolute desktop cursor positions. Try this in the Output/Mouse tab. You can enter the coordinates and see where the mouse goes. You can also use a voice command to dump the current x,y coordinates to the mouse log so that you can use the coords later in a script (think navigating menus).
  • You can no longer set relative mouse positions. You must use absolute. Relative really wasn’t too useful as you could never set where to start the relative movement.
  • This driver is far more reliable than the old SendInput message we used in previous versions.

VIRTUAL KEYBOARD DRIVER

  • This driver is far more reliable than the old SendInput message we used in previous versions. We still haven’t seen it fail to press a key in an app that could be pressed with a physical keyboard. SendInput failed quite often, depending on how the game devs restricted external inputs.
  • If you send a key DN (down) to the driver, you better follow it up with an UP for the same key. If you don’t, the key will remain stuck, just like someone is still pressing the key on a physical keyboard. You can kill this stuck key by shutting down ControlMyJoystick. Best to review your Alt-Tab and Alt-F4 skills for killing ControlMyJoystick should this happen. Wear it as a badge of experimental honor.

JOYSTICK BUTTONS

  • There used to be a list of output joystick buttons that you assigned names to. This has been removed as it is no longer required.

BUG FIXES

  • Removed the particular theme that could cause a crash when selected.
  • Now when you double-click on the upper-right-hand corner ‘x’ to shut down the app, it doesn’t crash.
  • Nested scripts now work.
  • Fixed bug when some dialogs would appear underneath the main window when Stay On Top was enabled, making it look like the app had crashed.
  • Fixed odd placement and scaling of dialogs.
  • Reduced the number of words stored in the speech recognition dictionary, which will make recognition a bit more accurate.
  • Fixed bug that could occur when bringing up the Profile Target dialog if there was an app running with a title of greater than 256 chars in length.
  • Removed duplicates from Profile Target dialog.
  • Fixed bug that could prevent a script commands MACRO_SYNC and MACRO_ASYNC from running properly.
  • Fixed a bug where a keystrokes could be sent to CMJ if the target app is not available.
  • Fixed a bug where sometimes macro’s would appear in the macros activity list even if they were no longer running.
  • Fixed a bug where if you duplicated a macro, it would not select the newly duplicated macro.
  • Reduced the likelyhood of a crash due to switching themes too fast.
  • Increased the volume of the beep.wav file.
  • Fixed duplicate cmjson file created when renaming a profile then editing and saving profile notes.
  • Tweaked how mouse movements and button presses works in scripts. See the new ‘Tutorial 15 – Draw an X in Microsoft Paint’ for a demo.
  • Many other small fixes. A bunch, really.

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!