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 11, 10, 8, 7 and XP in both 32 and 64bit versions
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), it can include an asterix (*) to indicate the settings for that user were loaded.
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. You can also use short cut keys; ALT-N (for Native), ALT-D (for Disable) and ALT-E (for Emulate). 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.
You can also use short cut keys; ALT-D (to activate draw mode), ALT-E (to enable the eraser), ALT-C (to clean) and ALT-O (to change the color).
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.
To make sure the dialog is always on top, select Keep window on top.
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) enable the Repeat playback option.
Adding a delay (in seconds) before playback is done via adding a number into the Start delay edit control.
You can also use short cut keys; ALT-R (to start recording) and ALT-P (to start playing).
The Stop op ESC option allows you to press the escape key to stop recording or playing.
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:
User configurations
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.
Base user mapping - this will allow MouseMux to map devices to static hardware names
You may employ this if devices get re-arranged during load, do notice that if you have multiple devices
of the same type/brand they may overlap.
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
Use Windows cursor will allow MouseMux to utilize the standard mouse cursor for the root user in switched mode.
Enable delta motion will make MouseMux listen to mouse jumps triggered by external progams and then move the cursor to that position.
Note that each user also has to enable this setting in the output tab.
Hide inactive cursors will hide curors once the remained motionless for at least 5 seconds.
Service settings
Clicking on the Service settings will open the service daemon - you can customize additional features here:
Block (external) injection will block all injected input from external programs; note that enabling this will affect the capture device - it may no longer be able to capture input.
Block touch events will block all injected touch input from external programs; note that enabling this will affect the capture device - it may no longer be able to capture input.
High proirity threading let the service run with a higher priority.
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.
If you notice that there are 'double clicks' (when clicking something there will be actually two clicks quickly after each other, so
for example when clicking a checkbox it will first select and then immediately deselect itself) then go to the Settings, click
on Service settings and then enable Block (external) injection
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. The local and
remote users can also type in separate windows - to do so make sure to also enable the capture keyboard device in the red user's keyboard
tab. Then enable the Multi keyboard option in the main UI - now each cursor can click on a different window and then start typing
simulationous there.
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.
If you notice that there are 'double clicks' (when clicking something there will be actually two clicks quickly after each other, so
for example when clicking a checkbox it will first select and then immediately deselect itself) then go to the Settings, click
on Service settings and then enable Block (external) injection
Now you are all set for the auto clicker to control the red user.