This repository was archived by the owner on Jul 13, 2026. It is now read-only.
Repository navigation
v2.1.0: Stability Fixes (Heartbeat Restored), Hotkey, Unified Config
This release (v2.1.0) builds upon the Python rewrite (v2.0.0) by reintroducing critical stability features and refining the core logic based on testing. The focus is on reliable persistent connections and robust error handling.
Major Changes & Improvements:
- 🔗 Heartbeat Restored: Re-implemented the client heartbeat thread to reliably maintain connection validity with the server and prevent unwanted timeouts.
- 🐛 Connection Stability Fixed: Addressed issues where either the client or server would prematurely drop connections. Implemented more robust send/receive logic and reconnection attempts on the client.
- 🛡️ Server Failsafe Added: The server (MouseMoveR.exe) now attempts to send a
STOP USINGcommand via IPC if the client disconnects while it reportedly had focus, preventing the USB device from getting stuck. ⚠️ Server IPC Handling Improved: The server now handles VirtualHere IPC errors (like Error 231 "Pipe Busy") more gracefully, acknowledging the client's command state even if the immediate IPC action fails, preventing client-side spamming loops.- ✨ Hotkey Feature: Includes the configurable hotkey on the server (MouseMoveR.exe) to terminate a specified process (default:
\). Uses input polling via thekeyboardlibrary for better game compatibility (Requires Admin rights). - 📄 Unified & Compatible Config: Both client and server continue to read the same
config.txtfile, using the simplekey = valueformat (compatible with the original C++ version's config, no[Section]headers needed). - 🚀 Python Base: Built on the Python 3 rewrite introduced in v2.0.0.
Executables created with PyInstaller (like the ones provided here) are sometimes flagged as potentially malicious by Windows Defender or other antivirus software. This is usually a FALSE POSITIVE. It happens because:
- The EXE bundles Python and libraries, unpacking them temporarily to run, which can resemble malware packers.
- The EXE is unsigned.
- The code uses libraries (
keyboard,psutil,pywin32) that access system functions which could be used maliciously (but aren't here).
What to do if flagged:
- Ensure you downloaded the release directly from the official GitHub repository. Do not trust binaries from other sources.
- Open Windows Security > Virus & threat protection > Protection history.
- Find the detected item related to
MouseMove.exeorMouseMoveR.exe. - Click Actions and choose Allow or Restore.
- For persistence, consider adding an Exclusion for the specific files or the folder you placed them in via Windows Security settings (Virus & threat protection settings > Manage settings > Add or remove exclusions).
Included Binaries:
MouseMove.exe: The client application (run on your local PC).MouseMoveR.exe: The server application (run on the remote/host PC).config.txt: Example unified configuration file. Edit this file with your settings and place it alongside BOTH executables.
Example config.txt:
(Both MouseMove.exe and MouseMoveR.exe read this same file)
# MouseMove & MouseMoveR Configuration v2.1 (Python)
# Place this ONE file in the same directory as BOTH MouseMove.exe and MouseMoveR.exe
# --- Client Settings (Used by MouseMove.exe on your LOCAL PC) ---
SERVER_IP = 192.168.1.101 # <-- REQUIRED: Change this to the Server's IP
WINDOW_TITLE = YourComputerName - Moonlight # <-- REQUIRED: Change this (Exact Window Title)
HEARTBEAT_INTERVAL = 5 # Seconds between client heartbeats
POLL_INTERVAL = 2 # Seconds client waits between focus checks (if window not found) / connect retries
VHUSB_CHECK_INTERVAL = 30 # Seconds between client checks if vhusbdwin64.exe is running
CONNECT_RETRY_DELAY = 3 # Seconds client waits after a failed connection attempt before retrying
# --- Server Settings (Used by MouseMoveR.exe on your REMOTE PC) ---
DEVICE_ID = YourVHServerName.123 # <-- REQUIRED: Change this (VirtualHere Device ID)
PROCESS_TO_KILL = GameExecutable.exe # <-- OPTIONAL: Change or leave blank
HOTKEY = \ # <-- OPTIONAL: Change or leave blank
WARNING_INTERVAL = 60 # Seconds between showing "Client disconnected" warnings
HEARTBEAT_TIMEOUT = 17 # Seconds since last command/heartbeat from client before timeout
POLL_INTERVAL = 5 # Seconds between server status checks (e.g., IPC check if focused)
# --- Shared Settings (Used by BOTH Client and Server) ---
SERVER_PORT = 8080 # Default: 8080. Must match.
**Installation & Usage:**
1. Download `MouseMove.exe`, `MouseMoveR.exe`, and the example `config.txt`.
2. Place all three files in the **same directory**.
3. **Edit `config.txt`** with your specific settings (IP Address, Window Title, Device ID are required).
4. **On the REMOTE PC:** Copy `MouseMoveR.exe` and the edited `config.txt`. Run `MouseMoveR.exe` **as Administrator**. Allow through firewall if prompted. Ensure VirtualHere Client is running.
5. **On the LOCAL PC:** Copy `MouseMove.exe` and the edited `config.txt`. Run `MouseMove.exe`. It runs in the background.
**Building from Source:**
If you prefer to build the executables yourself:
1. Install Python 3.7+.
2. Install dependencies: `pip install psutil pywin32 keyboard pyinstaller`
3. Place the final Python scripts (e.g., `mousemove_client_v4.1_full.py`, `mousemover_server_v4.2_syntax_fixed.py` - rename them appropriately) in a folder.
4. Open a terminal in that folder.
5. Build Client:
```bash
pyinstaller --onefile --windowed --name MouseMove --hidden-import=win32timezone mousemove_client.py
```
6. Build Server:
```bash
pyinstaller --onefile --windowed --name MouseMoveR --hidden-import=win32timezone --hidden-import=win32pipe --hidden-import=win32file --hidden-import=pywintypes mousemover_server.py
```
*(Use `--console` instead of `--windowed` for debugging builds).*
7. Find EXEs in the `dist` folder. Copy your `config.txt` alongside them.