RemoteMouseFix is a portable Windows tool for mouse and camera jumps in 3D games used through remote-control software. It was created for TeamViewer and World of Warcraft 3.3.5a, where a click into the 3D view can make the camera jump and remote camera turns are difficult to control.
The tool runs beside the game. It does not modify or inject code into the game, install a driver, require administrator rights, access the network, or write to the registry.
Important
RemoteMouseFix is experimental. The correction has been developed from measurements of TeamViewer with WoW 3.3.5a. Other games and remote-control applications may behave differently.
Both recordings show the same camera turn in WoW 3.3.5a through TeamViewer: the right mouse button is held while the pointer moves slowly left and right.
- Open the latest release and download the Windows x64 ZIP from Assets.
- Extract the complete ZIP into a normal folder. Do not run the EXE from inside the ZIP.
- Start WoW normally, without administrator rights.
- Double-click
Start-Playing.cmd. Keep its console window open while playing. - Connect through TeamViewer and test the camera.
The gameplay profile targets Wow.exe and enables the recommended absolute correction
immediately. It keeps compact diagnostic logs in the logs folder beside the program.
The extracted folder holds the two launchers and the two programs; everything else stays in a folder of its own:
Start-Playing.cmd play with the correction on
Start-AB-Test.cmd compare the modes and record a detailed log
RemoteMouseFix.exe the tool itself
InputEchoCheck.exe companion check, see below
README.md LICENSE
config/ the three profiles
docs/ diagnostic reference
logs/ created on the first start
The release EXE is not code-signed, and RemoteMouseFix installs a low-level mouse hook and sends synthetic mouse input. Both are normal for this kind of tool and both are things security software watches for, so expect warnings:
- SmartScreen may show "Windows protected your PC". Choose More info, then Run anyway, after you have checked the download as described below.
- Antivirus software may flag the EXE heuristically. If yours quarantines it, report a false positive to your vendor rather than disabling protection.
Every release lists the SHA-256 checksum of its ZIP. Verify it before extracting:
Get-FileHash -Algorithm SHA256 .\RemoteMouseFix-vX.Y.Z-win-x64.zipIf the value does not match the release notes, do not run the program. The full source is in this repository and can be built yourself, see Build from source.
The console keeps a live panel at the bottom. Each line answers one question, and the colour repeats the answer: green means working, yellow means waiting for you, red means the fix stopped itself.
GAME * Wow.exe is in front
FIX * on (absolute) - correcting the pointer
WORK 20 jumps seen, 51 corrections applied
NEXT > Everything is working. Ctrl+Alt+C switches the fix off at any time.
KEYS Ctrl+Alt+1 fix on | Ctrl+Alt+C fix off | Ctrl+Alt+P pause log | Ctrl+Alt+Q quit
GAME is yellow while the game is not running or while another window is in front: the
fix only works on the window you are actually playing in, so clicking into the game is
what turns this line green. FIX turns red when a watchdog switched the correction off,
and then says why; that state stays on screen instead of scrolling away. NEXT always
names the one thing to do next.
Set NO_COLOR=1 for a monochrome panel. When the output is redirected to a file, the
panel is printed once per change instead of being repainted.
| Hotkey | Effect |
|---|---|
Ctrl+Alt+C |
switch the correction off immediately |
Ctrl+Alt+1 |
enable the recommended absolute correction |
Ctrl+Alt+2 |
enable the alternative relative correction |
Ctrl+Alt+Q |
quit RemoteMouseFix cleanly |
Closing the console also stops the tool. It leaves no service, driver, registry entry or game modification behind.
If Ctrl+Alt+C cannot be registered, RemoteMouseFix refuses to enable correction. This
ensures that a remote operator always has an emergency-off key.
| Setup | Status |
|---|---|
| TeamViewer with WoW 3.3.5a | measured target case; absolute is the recommended mode |
| Another game that repeatedly recentres a hidden cursor | may work; test carefully |
| A game that reads Raw Input | relative may work better, but Windows pointer settings can change its speed |
| Another remote-control application | unknown until tested; please submit a comparison log |
| Game running as administrator | unsupported; run the game and RemoteMouseFix normally, without elevation |
RemoteMouseFix cannot recreate pointer positions that the remote-control application never
delivered. It smooths delayed catch-up movement in absolute mode, but a poor connection
can still add latency.
The A/B profile records detailed mouse movement for comparison. It never records keyboard input or text, and it has no upload or network feature. You decide whether to share a log.
- Start the game and move to a quiet, safe location.
- Double-click
Start-AB-Test.cmdfrom the RemoteMouseFix folder. - Confirm that the console names
config-ab-test.jsonand that the panel showsFIXon withabsolute, andGAMEturning green when you click into the game. - Test the same actions in each mode:
absolute,off, thenrelative. UseCtrl+Alt+1,Ctrl+Alt+CandCtrl+Alt+2to select the modes. - Before every action, press
Ctrl+Alt+Mto add a marker to the log:- click once into the 3D view without moving the mouse;
- hold the right mouse button and turn slowly left and right;
- hold the left mouse button and drag slowly.
- Note for each mode whether the camera is smooth, jumps, or moves too fast or too slowly.
- Press
Ctrl+Alt+C, thenCtrl+Alt+Q. - Open the newest file in
logsand check that its final lines reportqueue drops 0andwatchdog trips 0. - ZIP that log and attach it to a
GitHub issue together
with:
- game and version;
- remote-control application and version;
- Windows version;
- display resolution and scaling;
- your observations for each mode.
Logs are limited to the configured target process. They contain mouse positions, timing, window geometry, process names and numeric process/window identifiers. Focus-change lines may name another application that briefly became active. Review a log before publishing it if that information matters to you. Never include account details, chat content or other unrelated screenshots in a report.
With absolute remote input, a single drag can only turn as far as the remote pointer can travel on the controlling screen. Release and grab again to continue turning.
WoW hides the cursor while controlling the camera, repeatedly moves it back to a fixed anchor and interprets the distance from that anchor as camera movement. The measurement of 2026-09-12 found that TeamViewer delivered each pointer update as an injected absolute position. This overwrote the game's cursor warp and left the pointer 140 to 410 physical pixels away from the anchor instead of 1 to 3 pixels.
Only while a correction mode is active, the target window is in front and its cursor is hidden, RemoteMouseFix:
- withholds injected mouse-move events from another program so the game's warp stays intact;
- calculates how far the remote pointer itself moved;
- sends that movement back to the game in a marked
SendInputevent.
Buttons, the wheel and physical mouse input are never withheld or changed. UI clicks stay untouched because the cursor is visible in the game UI.
The full evidence and its limitations are in docs/findings-2026-09-12.md.
| Mode | Output | Trade-off |
|---|---|---|
off |
no correction | observation and baseline comparison only |
absolute |
absolute SendInput to the cursor position plus delta |
exact pixels without pointer acceleration; recommended for WoW 3.3.5a |
relative |
relative SendInput |
can suit Raw Input readers, but pointer speed and acceleration distort movement |
absolute spreads batched TeamViewer movement across steps of at most 20 pixels per axis
every 16 ms. Pending movement is discarded on mouse-button release, focus loss or
correction shutdown. When new remote movement reverses an axis, stale queued movement on
that axis is discarded so the camera follows the new direction without elastic pullback.
Opposing deltas below 5 pixels are treated as remote-input noise.
A SetCursorPos implementation was also tested and rejected. It lost about 40 percent of
movement because it raced with the input thread finishing the withheld event. SendInput
is queued behind that event and is processed in order.
- The plain
RemoteMouseFix.exeusesconfig.json, which is diagnostic-only and cannot enable correction. Start-Playing.cmdandStart-AB-Test.cmdexplicitly select profiles that permit correction and start inabsolutemode.Ctrl+Alt+Cswitches correction off immediately.- Releasing the mouse button or changing focus ends the intervention at once.
- Watchdogs disable correction after an unusually long hidden-cursor phase, repeated output failures, or synthetic events that fail to return through the hook.
- There is no DLL injection, driver, kernel component or code in the game process.
- There is no installer, registry write, network access or change to game files.
- There is no keyboard hook.
RegisterHotKeycan observe only the documented hotkeys. - Input outside the configured target application is discarded before it is logged.
- Windows 10 or Windows 11, x64
- the game and RemoteMouseFix running at the same integrity level
Windows silently discards synthetic input sent to a more privileged window. If the log
shows <access-denied> in the process column, run both applications without elevation.
The release EXE is statically linked and depends only on Windows system libraries.
config\config.json is read from the program folder unless another path is supplied as
the first command-line argument:
RemoteMouseFix.exe [path\to\config.json] [--seconds N]
A relative name that is not found beside the EXE is looked up in config\ as well, so a
folder from a release before 0.7 keeps working after an in-place update.
Keys beginning with _ in the supplied configuration files are explanatory comments.
| Key | Built-in default | Meaning |
|---|---|---|
target_process |
Wow.exe |
executable to observe, matched case-insensitively |
diagnostic_mode |
true |
true prevents all correction; false permits correction modes |
correction_mode |
off |
startup mode: off, absolute or relative |
watchdog_max_hidden_ms |
180000 |
hidden cursor duration before correction is disabled; 0 disables this check |
watchdog_max_unechoed |
50 |
own events allowed outstanding before the echo watchdog trips |
watchdog_max_output_failures |
5 |
consecutive failed output calls before the watchdog trips |
log_mouse_moves |
true |
false records buttons, wheel and state only |
log_directory |
logs |
relative paths resolve beside the EXE |
log_file_prefix |
remotemousefix |
log filename prefix |
max_log_bytes |
8388608 |
rotate after this size |
max_log_files |
5 |
number of log files retained |
flush_on_button |
true |
flush after every button event |
jump_threshold_px |
40 |
tag a move as JUMP from this delta |
anchor_tolerance_px |
3 |
tag a move near the learned anchor as ANCHOR |
state_poll_interval_ms |
10 |
cursor-state and anchor-learning interval |
log_state_changes |
true |
write state-transition lines |
console_status_interval_ms |
2000 |
live console interval; 0 disables it |
heartbeat_interval_ms |
10000 |
log heartbeat interval; 0 disables it |
Log files rotate by prefix. Copy a log you want to retain out of logs before taking many
further captures.
Install Visual Studio 2019 or newer, or the Visual Studio Build Tools, with Desktop development with C++ and CMake 3.20 or newer.
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config ReleaseThe result in build\bin\Release contains RemoteMouseFix.exe, MouseLookProbe.exe, all
three configuration profiles and both .cmd launchers.
sudo apt install g++-mingw-w64-x86-64 cmake
cmake -S . -B build-mingw -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw-w64-x64.cmake
cmake --build build-mingw -jFor a toolchain outside PATH, add
-DRMF_MINGW_PREFIX=$HOME/.local/opt/mingw-w64/usr. Use -DRMF_BUILD_PROBE=OFF to omit
the test probe. CMakeLists.txt rejects a native Linux target.
If the correction switches itself off with "own moves never reached the hook", run
InputEchoCheck.exe from the same folder. It sends eight signed mouse moves of one pixel
and reports how many come back through its own low-level hook, along with the foreground
window and its integrity level, which decides whether Windows discards synthetic input
silently (UIPI). Start it, click into the game during the countdown, hold the right mouse
button to have the mouse-look state measured, and attach the resulting
input-echo-check.txt to a report.
Quit RemoteMouseFix first, with Ctrl+Alt+Q. While it corrects, it withholds exactly the
kind of input this check sends, so its filter, not the system, would decide the result.
MouseLookProbe.exe reproduces the measured mouse-look mechanism without the game. It
hides the cursor on a button press, warps it to an off-centre anchor and records the summed
movement of each phase in mouselook-probe.log.
tools/probe/emulate-remote.ps1 starts both programs, injects a TeamViewer-shaped absolute stream and runs a click without motion, a steady drag and a stalled drag. A click without movement must sum to zero. A drag of known length must sum to that length. The probe reads the cursor position as WoW does, so passing this test does not prove compatibility with games that use Raw Input.
The detailed log format and acceptance criteria are documented in docs/diagnostics.md.
RemoteMouseFix/
CMakeLists.txt build and version
config/ safe, gameplay and A/B profiles with launchers
cmake/ version template and MinGW toolchain
docs/ diagnostic reference and measured findings
include/rmf/ C++ headers
src/ application implementation
tools/probe/ stand-in game and remote-input emulator
tools/echo-check/ input echo and integrity-level check
Reports from other setups are the most useful contribution, see Report a problem or test another setup. CONTRIBUTING.md describes the build, the test requirements and the safety rules every change has to respect. Security problems go through SECURITY.md, not through a public issue. Released changes are listed in CHANGELOG.md.
If RemoteMouseFix helps you and you want to support its development:
- Buy Me a Coffee: https://buymeacoffee.com/quasistatic
- Ko-fi: https://ko-fi.com/quasistatic
RemoteMouseFix is an independent project and is not affiliated with, endorsed by or sponsored by Blizzard Entertainment or TeamViewer. World of Warcraft, TeamViewer and all other product names are trademarks of their respective owners and are used here only to describe the setups that were measured.
MIT, see LICENSE.

