MouseMux V2 Manual

Share

Latest revision: March 2024

Introduction

MouseMux is a program that allows multiple users to operate on the same windows desktop simultaneously. Each user gets their own mouse cursor and can pair a keyboard with that cursor thereby creating a new virtual user. It does something that Windows was never designed to do; allow multiple users to work on the same desktop at the same time - this creates new interaction challenges: what happens if two users click in the same window? What if user A wants to drag a window to the left and user B wants to move it to the right? What happens if user A tries to close the window while user B is still working in? There are many new scenarios and possible conflicts - MouseMux applies a new and simple ruleset to make it a smooth ride. This manual will guide you through the details in running the program and explains some of these new interaction rules and guidelines.


A one-minute introduction video:


Some of its features:

General features

  • Support for Windows 10, 8, 7 and XP in both 32 and 64bit versions
  • Initial support for Windows 11
  • Support for all pointer devices; mice, pens, touchpads and touch screens
  • Multi monitor support
  • Per monitor DPI support
  • Three modes of operation:
    • Standard (emulating normal windows behavior)
    • Switched (switched interaction)
    • Multiplex (full concurrency)
  • Cursors are tagged with a color for each user
  • Activity indicators for each pointer device and keyboard
  • Support for hot plugging and removing pointer devices and keyboards
  • Support for USB, PS2 and Bluetooth hardware
  • Automatically start with windows
  • Automatically load/save settings
  • Automatic updates while the program keeps running
  • Automatic mouse curve acceleration calibration
  • Capture injected mouse input from remote control programs (TeamViewer, etc)
  • Capture injected mouse input from high precision touchpads
  • Hide to tray or taskbar
  • High priority threading

Per user features

  • Pointer input information, manufacturer, features and more
  • Pointer output selection
    • Emulate input device as mouse, pen, touch device
    • Emulate pen pressure/rotation
    • Emulate relative motion for absolute coordinate devices
    • Disable certain events from devices (motion, clicks, wheel)
    • Force screen offset
    • Force hardware motion
    • Force root operation (override input injection)
    • Disable clipping, invert axis of motion
  • User statistics, motion, buttons clicked. Changing name
  • Custom mouse acceleration via multiplier per axis, or fully disable acceleration
  • Custom mouse acceleration through emulated ballistics from past Windows versions
  • Mouse buttons can be swapped and double click speed adjusted
  • Mouse wheel speed adjustment and inversion
  • Emulate horizontal wheel scrolling through key or button combo's
  • Select a cursor theme and cursor size
  • Mirror cursor on X or Y axis, change tagging type
  • Lock the cursor to a specific display/monitor
  • Draw or annotate on the desktop
    • Change color, size and alpha of brush
    • Save screenshot of annotation
  • Keyboard information, manufacturer, features and more
  • Keyboard un-mapping and re-mapping
  • Record and play back macro's - even simultaneous playback is supported
  • Replicator
    • Replicate pointer motion, buttons and/or wheel
    • Block certain events
    • Change step speed, offset, etc.




Starting MouseMux


Once you start MouseMux (via the shortcut on your desktop or the Windows Start menu) you will see a simple UI, this is the main window. On the first run it will measure your acceleration and calibrate your mouse - this will take a couple of seconds and only needs to be done once.


The main window looks as follows:

  • On the top row:
    • User signifies the user number and a designated color
    • R stands for Registered
    • M stands for Mouse
    • K stands for Keyboard
    • Name is the username (which you can change)
  • When the program starts all pointers (mice, pens, touchpads, etc) are scanned and are added to the list. Note that some may be disabled by Windows and some may be virtual (so not all will reference actual hardware).
  • When a user is not registered all the icons remain grey.
  • When you move a mouse for the first time it will be registered; you will see a black user icon appear under R. The mouse icon under M will also turn black. The mouse icon turns to orange whenever there is mouse movement detected.
  • When you type on a keyboard the keyboard icon will turn black, this means a keyboard is mapped to that user. The keyboard icon turns orange whenever keyboard activity is detected.
  • The icon in the R column will light up orange if that user is the active (root) user in Switched mode. And will turn to red if another user is denied becoming root (when the root user has a button down).


The main mode of operation is specified by selecting:

  • Native mode - In this mode all pointer devices are read for input and all output coordinates are merged into a single position/cursor, just like Windows does.
  • Switched mode - In this mode each pointer device gets their own cursor, and you can assign (map) a keyboard to that pointer device. Users can drag or resize windows simultaneously and users can also type in different windows at the same time by enabling the multi keyboard option. The mode is called switched because once a user holds down a mouse button another user cannot click at the same time. Control is switched from one user to the other - the one that is in control at one moment is called the root user.
  • Multiplex mode - This mode extends switched mode by allowing all users to work simultaneously in different windows/programs. Not all programs will work properly in this mode, but most will, and support is improving every day. Once enabled, go to a window, click on it and that window will now be owned by that user.

Extended information for each mode can be found here.


During runtime you can always use CRTL-ALT-F12 for an emergency exit if needed.




Configuring a specific user



If a user moves (hovers) their cursor over the main window the user config button will show the username and number (see image to the left). Clicking the button will open the configuration panel for that user. Configurations are solely affecting that specific user - that means that each user can specify (for example) a custom mouse acceleration and it will only affect the specific device. There are multiple tabs, detailed below. Note that other users can also change the settings of another user - so make sure that the correct user is active in the correct configuration dialog. Opening the configuration for any user can also be done by double left clicking the user number/color in the main window.






Per user configuration options


The various options to configure are in separate tabs, here is a list of those:


Input tab

This shows you information about the input pointer device and its properties. To disable the device from sending any output select the checkbox Disable this device. The Winfo button will show additional Window information whenever the cursor moves over a new window.








Input tab for pen and touch devices

Note that pen, touch and touchpads may add several (virtual) devices. The image on the left shows a Wacom pen virtual HID device. Depending on the settings in the pen driver MouseMux will generate specific devices for each mode of operation for the pen (Pen mode versus Mouse mode).









Input tab capture device

MouseMux allows for input capture via the input capture device (see image to the right). It will intercept mouse/keyboard input that gets injected from external programs. This allows you to (for example) have a remote desk program operate as a separate user while other users can still work independently on the same system. It can also intercept input injected from macro programs or robo/auto clickers and it allows you to capture input from most high precision touchpads.





Note that by default this device is disabled (note the checkbox at the bottom left) - this is because some pen devices also inject input which in turn ends up in the capture device. Also note that if the capture device doesn't show up you may have to enable it in the global start up settings.


Output tab

This tab allows you to specify how your pointer will act. Any input pointer can emulate another type, so a mouse can act as a pen, or a touchscreen can act as a mouse. In the Pointer output list you can select the output device type. Note that the output type only works in switched mode, in multiplex mode all devices act as virtual mice - the exception to this rule is when you enable Force root operation - that option will allow you to force the selected output pointer in any mode (including multiplex mode).





The output tab allows you to completely customize output, here's a rundown:

For Pen & Touch options the following functions are available:

  • X injection
  • Y injection
    • This is the X or Y position offset for touch/pen injection (normally the negative X/Y coordinate of your most left screen) - you can adjust this if you notice that pen/touch/tablet coordinates have an incorrect offset.
  • Automatic offset sync - This will automatically synchronize the coordinates of the injection to the top left screen coordinates.
  • Emulate pressure - This will emulate pen or touch pressure during motion.
  • Emulate rotation - This will emulate pen or touch rotation during motion.
  • Emulate relative motion - This will convert absolute device coordinates to relative coordinates, this allows for example to use acceleration and ballistics for a pen device that would normally only work in absolute mode.
  • Force true coordinates - Normally absolute coordinates are scaled both in X and Y direction by Windows (by 65535 units) - you can disable the scaling so coordinates do not get divided. You may need to enable this option if you notice that a device only moves a few pixels on the screen while it should move long distances.
  • Force screen offset - This adds the top-left virtual coordinate for each move - this may help if you notice that a device has an incorrect offset during motion.

You can adjust the output with the following overrides:

  • Disable motion - Disable motion output for this device.
  • Disable buttons - Disable button (clicks) output for this device.
  • Disable wheel - Disable wheel output for this device.
  • Disable clipping - This will disable clipping of screen coordinates meaning the cursor will be able to go outside the screen space.
  • Invert X-axis - Invert motion over the X axis.
  • Invert Y-axis - Invert motion over the Y axis.

and

  • Enable delta motion - Sometimes other programs will set the cursor to some position, this option allows you listen for these events and set the user's cursor position to the new detected position.
  • Force virtual desktop - This will force hardware coordinates to be outputted in virtual desktop space.
  • Force root operation - This will force injected output in both switched and multiplex mode irrelevant whether the user is the root (active) user (in switched mode). This allows you to always override other users/devices - notice that this may lead to strange results as the device is now forcing hardware output without synchronizing and locking other users/devices. You can use this option to create very specific scenario's; for example - allow multi touch by using two mouse devices that both output as a touch device. Or assigning one device as a pen that will work in an UWP app while other users work in different apps in multiplex mode.
  • Force hardware dragging - This will force hardware dragging output - some programs need this option to properly follow the mouse cursors, for example file dragging or drawing in some paint programs (Photoshop, MS Paint, Paint.NET, etc) will require this option to be enabled.
  • Force hardware motion - This will force hardware motion output - This will force hardware motion for each move, not just for dragging (see above)

Keyboard tab

This shows basic information on what keyboard is paired with this pointer. If the fields are empty either no keyboard is mapped (hit a key to see the information arrive) or that the keyboard is already paired to another user. You can unmap the keyboard (so another user can use it), to do so click the Unmap button. Keyboards are mapped to the user that moved last with their pointer - so to map your keyboard, move your pointer device and then hit a key on the keyboard you want to pair. The Disable this device option allows you to completely disable all input from this keyboard.


The following keyboard interaction options (which can be used either in multiplex mode or in switched mode with the 'multi keyboard' checkbox enabled) are available:

  • Disable thread attach - Normally when MouseMux injects keyboard input it will attach itself to the input thread of the program you are typing into. You can disable this by checking this option - this will mean keyboard buffers will not be synced between MouseMux's internal virtual keyboard mapping and your program but it will still send window messages to emulate keyboard strokes.

  • Disable automatic focus - Normally when MouseMux injects keyboard input it will try to figure out which (child) dialog has focus and send the keystrokes to that window. If you disable the automatic focus finder MouseMux will send your keystrokes to the window you last clicked on.


User tab

The user info tab shows various metrics on movement, button wheel and key usage for that user. The sum indicates the total of all events counted for that user while the timing indicates the last time the user emitted that event. The tab allows you to change the name of the user by typing a new name and then by clicking the Apply button to activate it.








Ballistics tab

When MouseMux starts it will measure your current mouse/pointer ballistics. In this tab you can customize what ballistics are active. When selecting Native the measured acceleration just mentioned will be used, when selecting Disable the raw hardware mouse input data is used and when selecting Emulate you can select a windows version, the speed and if you want to emulate Enhanced pointer precision to emulate ballistics from that Windows version. Press the Apply button to activate the profile.



Acceleration tab

Cursor acceleration is computed in two steps; the base acceleration (from ballistics, see above) is taken and then multiplied by the pointer speed multiplier. In this tab you can change that multiplier for both axes. Enabling the Synchronize multiplier axes option will equalize both the X and Y speed multiplier. Make sure to click the Apply button to activate your changes.









Buttons tab

The options here allow you to change button behavior. The Right button is primary option allows you to switch from right to left hand button action. The double click speed can be customized with the slider. Make sure to click the Apply button to activate your settings.











Wheel tab

The wheel speed can be modified with the slider. Checking the Invert wheel option allows for inverted wheel movement. Emulating a horizontal wheel is possible by choosing one of the options in the listbox. The vertical wheel will then send horizontal wheel events when the condition is true. Click the Apply button to activate your settings.









Theme tab

One can change the cursor theme by selecting one from the list. Note that some themes are low resolution and scaling them up may give a pixelated result. Note that there is also a Blank theme if you want a completely invisible cursor. Scaling the cursors is done by moving the Cursor size slider. The Tagging option list allows for changing the tag type that is attached to the cursor. Mirroring the axis of the cursor may be useful on tabletop screens or other mirrored screens, to do so select the X-axis option for horizontal mirroring or the Y-axis option for vertical mirroring. Press Apply to activate your settings.



Lock tab

The cursor can be locked to a specific monitor/display by selecting it from the list. Pressing the Show button will highlight that specific screen. To limit the cursor movement to the work area, select the appropriate checkbox. Once you selected the monitor press Apply to activate your settings. Understand that your mouse may now move to a monitor other then where the user dialog is located - so may have to use another mouse to disable the lock as the current user/mouse can no longer reach the dialog!




Draw tab

This allows you to draw or annotate on the screen. First select how to activate the brush by selecting a button/key combo in the Brush activator list. To enable drawing mode, push the Draw mode button. If for example you selected the right mouse button as activator you can now draw on the screen by holding down the right mouse button. Selecting the Eraser will allow you to erase parts of your drawing. The Clear button will clear the drawing. To save a screenshot press the Save button; it will save your screenshot in the MouseMux's date folder in your Documents.


Changing the color, the brush size or the transparency is done by the appropriate controls.


Macro tab

Start recording a macro by pressing the Record button and once done use the Play button to replay it. Press the Stop button to either stop recording or playback. To start over the recording press Reset. You can save a recording by pressing the Save button and loading one by pressing the Load button. Playback speed can be changed by moving the Playback speed slider - you can both speed up or slow down the playback. To repeat the recording (loop it) enable the Repeat playback option. To make sure the dialog is always on top, select Keep window on top.


Recording and playback is supported in switched and multiplex mode. All mouse movement, clicks and keyboard keys are recorded. Interaction with MouseMux itself is filtered out – so clicking on any of MouseMux’s windows will generate dummy clicks.


Replicator tab

The replicator allows you to clone an existing user and have all their actions replicated by a second virtual user. As each user can replicate, a replicated user can in turn also replicate itself again - so you can create chains of replicated behavior. By default, only motion is replicated, but each individual data source can be replicated. Once you press the Start button a new user will be created from a virtual device which you will also see in the main list of users, that user is controlled by the current user as the replicant. Pressing Stop will stop the replication.


The following options are available, to replicate certain events you can enable:

  • Pointer motion - duplicate the pointer motion, using the offset specified with the X offset and Y offset values (see below)
  • Pointer buttons - duplicate the pointer buttons (clicks)
  • Pointer wheel - duplicate pointer wheel events
  • Keyboard - duplicate keystrokes

To customize pointer buttons you can opt to block certain click/button types:

  • Left - Don't allow left button clicks
  • Right - Don't allow right button clicks
  • Middle - Don't allow middle button clicks
  • X1 - Don't allow extended one button clicks
  • X2 - Don't allow extended two button clicks

The X offset and Y offset position the replicated cursor relative to the source (original) cursor, you can specify both negative and positive numbers. The Step speed slider dictates how fast events are replicated, moving the slider more to right increases the delay. The Pointer button click delay dictates how much delay there is between a click from the source (original) pointer and the replicated pointer. This allows you to time clicks between different pointers.


Choosing the interaction mode

The interaction mode you select will regulate how multiple mice, users and keyboards interact with the underlying programs and OS. There are three modes to choose from; native, switched or multiplex. The table below shows an overview of what the features are as far as interaction in each mode.


Native mode
Native mode emulates how windows normally behaves. All output from mouse devices is still routed through the program yet the data is combined and sent to the normal windows cursor. The same for keyboards, all keyboard input is combined and sent to the window that has keyboard focus. In other words; each mouse moves the same cursor and each keyboard types to only one window.


Switched input mode

In switched mode each user gets their own mouse cursor. A keyboard can be paired to any user and once the pairing is done that keyboard will only send keystrokes to the window that is active for that user. Users can independently drag and resize windows and can simultaneously type in different windows. Window activation and working inside a window/program is limited – active interaction is switched that means that whenever a person is holding down a mouse button all others are blocked from clicking inside a window (they can still drag windows and type, but not actively interact in that window/program). Whenever somebody holds down a mouse button and anybody else clicks the main window will show it is blocked by coloring that user red. After a user clicks, they become the active or root user. The root user is shown as an orange user icon in the list.



Keyboard pairing in switched input mode
Keyboard pairing means linking a keyboard to a mouse – together they represent a (virtual) user. Pairing is simple: move a mouse and hit a key on the keyboard that you want to pair. You will see both the mouse and keyboard light up orange in the row of your user number. Working with paired keyboards may feel unintuitive at first; here’s a use case to explain why. User A and B sit behind the same computer, there are two mice attached and one single keyboard. Both users are interacting with the desktop with their own mouse. User A pairs his mouse to the keyboard. User A clicks on notepad and starts typing. User B takes over and types on the same keyboard. Now user B clicks on some other window and expects to start typing in that window – but since the keyboard is paired with user A, and user A did not click on any other window user B will keep typing in notepad! Practically speaking; user B does not have a keyboard – he/she just follows what the focus window is of user A. This may feel unintuitive because generally you expect to be able to type in a window once you click on it. For this scenario we added an option to synchronize all keyboards (even if it’s just one) to all users – that means mice can operate independently but the keyboard is shared for all users. You can uncheck the multi keyboard option in the main UI to disable per-user keyboard pairing – when this option is switched off the keyboard(s) will work just like in normal windows – follow the window with focus to send key data to. Of course, if you have two keyboards and two mice and user A and B are both working on the desktop we suggest to keep the multi Keyboard option checked and pair each keyboards to an individual mouse so that both A and B can work independently with each a mouse and keyboard. To unmap and re-map a keyboard go to the keyboard tab and press the unmap button.


Multiplex input mode


Multiplex mode provides advanced interaction but works a bit differently than the other modes. In this mode all the functionality of Switched mode is inherited, and full concurrency is added. This means each user can work in a separate window/program at the same time; for example, one user can type in Microsoft Word while the other can paint in photoshop and a third can work in Microsoft Powerpoint. This will work for most programs but not all – we’re in the process of adding programs to our database and please let us know if you want support for a specific program. In multiplex mode, once a user clicks on a program, they become the owner of that program, that means all interaction from both mouse and keyboard from that user are directed to that program. MouseMux creates a thin and instant virtual machine layer for that application - the program thinks it’s getting normal mouse and keyboard input while in fact MouseMux is fully controlling it. Note that currently only mouse interaction is emulated (and not pen or touch). The normal flow for using Multiplex mode is to first start the programs you want to multiplex in in either native or switched mode. Once both programs are running on your desktop, switch to multiplex mode and for each cursor click on the specific application you want to work in.


The underlying technology for this mode is quite complex and we must advise to use this mode with caution, this is novel functionality – do not use this mode if you are doing important work on your computer. Worst case scenario is that a program you click on hangs or crashes. You can always exit MouseMux via the emergency exit hotkey (CTRL-ALT-F12)



Settings

Pressing the Settings button will open the configuration for MouseMux. Here you can change the global settings of MouseMux. The Register button allows you to register MouseMux with the license number you received via email after buying MouseMux. Once you have registered the Manage button allows you to manage your license via the payment provider portal.

Pressing the Service Settings button will open an additional dialog to customize the daemon service settings.











The settings dialog contains the following sections:

Configuration options
  • Load user settings - this will load the configuration for each user when the program starts.
  • Save user settings - this will save the configuration for each user before the program exits.

By seperating the loading & saving options MouseMux allows you to load a specific configuration each time without overwriting it.

Startup options
  • Start with Windows - this will start MouseMux when Windows starts.
  • Start minimized - this will start MouseMux with the main window in hidden state.
  • Use system tray - this will add an entry to your system tray so when you hide MouseMux it will go to your system tray versus your taskbar.
  • Disable dynamic DPI - this will disable dynamic DPI scaling of the UI
  • Disable pen/touch input - this will disable all input from pen, tablet and touch devices.
  • Disable capture device - this will disable the capture device.
  • Disable telemetry - this will disable sending telemetry to the MouseMux servers.

Note that changing any of the above options will not be effective until you exit and restart MouseMux.

Optimization options

If you find that mouse movement is a bit laggy you can let the program run faster by moving the Main loop speed slider to the left. Additionally, you can enable High priority threading for the program to become more responsive.

When you enable High priority multiplexing MouseMux will optimize output in multiplex mode and skip some processing steps. This will likely be compatible with many programs, but may not work perfect for some others.

Miscellaneous options

Enabling the Use Windows cursor will allow MouseMux to utilize the standard mouse cursor for the root user in switched mode.

Service settings

Clicking on the Service settings will open the service daemon - you can customize additional features there.


Special features

This chapter describes various scenarios for advanced users.

Enabling support for remote desktop programs

We have the following scenario:

You are on a computer with a mouse and keyboard and another user wants to log into your computer/desktop via some remote desktop program, for example TeamViewer, RustDesk, etc. You want to allow that remote user to operate with their own cursor while you operate with your own cursor at the same time. The idea is that two people working on the computer (one local, one remote) both see the same screen but have different cursors on that screen.

The capture device (available in the business edition of MouseMux and in trial mode) will capture the input injected by those remote programs and route it via MouseMux to the Capture device user (the red user). First make sure you have not disabled the capture device by checking the start up settings - if the capture device is disabled in the settings then first enable it and then restart MouseMux.

Then you have to make sure the capture device itself is not disabled; go to the red user and make sure the Disable this device checkbox is not enabled both in the input tab and in the keyboard tab.

Now you are all set for the remote user to login - once the remote user is logged in you will see the red user moving.


Enabling support for robo and auto clickers

We have the following scenario:

You are on a computer with a mouse and keyboard and you also want to run a program that injects or simulates mouse or keyboard events such as a macro recorder, a robo-clicker or auto-clicker. You want that program to control a user in MouseMux while you keep using your own pointer devices as usual. The idea is that the program controls one cursor while you control your own with your local pointer device.

The capture device (available in the business edition of MouseMux and in trial mode) will capture the input injected by these programs and route it via MouseMux to the Capture device user (the red user). First make sure you have not disabled the capture device by checking the start up settings - if the capture device is disabled in the settings then first enable it and then restart MouseMux.

Then you have to make sure the capture device itself is not disabled; go to the red user and make sure the Disable this device checkbox is not enabled both in the input tab and in the keyboard tab.

Now you are all set for the auto clicker to control the red user.