Releases: romkazor/IncottHIDApp
v0.4.0
โจ What's new
๐ท๏ธ Project renamed to IncottHIDApp โ matching the GitHub repo name. Binary, tooltip, tray dialog, registry key, single-instance mutex, User-Agent and log prefix all now use IncottHIDApp consistently.
๐ Version in tray tooltip โ hover the tray icon to see the running version at a glance. Before device connect: IncottHIDApp v0.4.0. After connect: IncottHIDApp v0.4.0 โ G23V2 (or your model).
โ ๏ธ Upgrade notes
- ๐ฆ The binary is now
IncottHIDApp.exe(wasIncottDriver.exe). Download the new file from this release and replace your existingIncottDriver.exe. - ๐งน Autostart migrates automatically. If you had autostart enabled in the old build, the legacy registry entry
IncottDriverunderHKCU\Software\Microsoft\Windows\CurrentVersion\Runis silently removed the first time you toggle autostart in the new build (or on every launch if autostart is enabled). No stale entries, no manual cleanup. - ๐๏ธ Your
settings.jsonandincott.logare unchanged โ same filenames, same location next to the executable.
๐ง Under the hood
- ๐ Single-instance mutex name changed to
Global\IncottHIDApp-{GUID}(same GUID). During the brief upgrade window an old and a new instance could theoretically coexist; kill the old one before running the new one if both are open. - ๐ก Update-check User-Agent is now
IncottHIDApp(visible in GitHub's API logs if you care about that kind of thing). - ๐ Go module renamed from
incott-drivertoincotthidapp. Internal only โ doesn't affect users.
๐ฆ Install
Download IncottHIDApp.exe below and run it. It will pick up your existing settings.json automatically. If you had autostart enabled, you can toggle it once from the tray menu to refresh the registry entry (or just leave it โ the legacy key is removed on every startup).
v0.3.0
โจ What's new
๐ Single-instance guard โ only one copy of IncottDriver can run at a time per machine. Launching a second copy now shows a friendly "already running" dialog and exits cleanly, without touching settings.json or incott.log.
Why it matters
Before this release, nothing stopped two (or more) copies from running simultaneously โ typically from autostart + manual launch, or a double-click on a pinned shortcut. Multiple instances would fight over the HID handle and cause:
- ๐๏ธ UI showing settings that didn't match the actual mouse state
- โก Race conditions when applying presets
- ๐ฎ False auto-boost triggers from duplicate process scans
- ๐ง Duplicate tray icons
How it works
- ๐ Named Windows kernel mutex with a fixed GUID:
Global\IncottDriver-{b5a1c2f8-...} - ๐ The check runs as the very first statement in
main(), before path resolution, config load, logger init, or any HID access - ๐งน Kernel auto-releases the mutex on every exit path โ clean shutdown,
taskkill /F, BSOD, power loss โ so there's no stale lock file to worry about - ๐ก๏ธ Fail-open: if
CreateMutexWitself fails for an unexpected reason, the app still starts so you're never locked out
๐ฆ Install
Download IncottDriver.exe below and run it โ no installer, just replaces the previous version in place. Your existing settings.json and autostart entry are preserved.
v0.2.1
What's Fixed
๐ Security
- openBrowser now uses
rundll32 url.dllinstead ofcmd /c startto avoid shell metacharacter interpretation. Onlyhttps://URLs are accepted. - promptForExe escapes single quotes before interpolating the saved target value into the PowerShell
InputBoxcall, preventing PowerShell injection from a craftedsettings.json. - isValidRepo now uses a regex allowlist to reject path traversal and URL manipulation characters in the
update_repoconfig value.
๐ Paths (important for autostart)
settings.jsonandincott.lognow always live next to the executable regardless of the process's current working directory. Previously, when launched from Windows autostart (CWD =System32), these files were created in the wrong location.
๐คผโโ๏ธConcurrency
- The mouse initialization sequence in
mouseWorkernow holds a mutex across all feature report reads, preventing concurrentSendFeatureReportcalls from the UI goroutine on the same HID handle. gameMonitorWorkerno longer saves the stale default 1000 Hz assavedHzwhen the game is already running before the device has reported its actual polling rate.
๐ชจ Robustness
readDeviceSettingnow checks theSendFeatureReporterror and returns immediately on failure (e.g. device disconnected mid-initialization).saveConfignow logs errors whenos.WriteFilefails instead of silently discarding them.
๐ Tests
- Added
TestEscapePowerShellSingleQuotedfor the PowerShell escape helper - Expanded
TestIsValidRepowith injection characters (../,?,#,@, spaces)
Full changelog: v0.2.0...v0.2.1
v0.2.0
What's New
๐ Update checker
The app now checks GitHub Releases on startup and shows a menu item
when a new version is available. Click it to open the release page
in your browser. Configurable repository via update_repo setting
(useful for forks).
๐ License
MIT License file added to the repo.
๐ Configuration example
Added settings.json.example with all available fields and default values.
๐ Documentation
- Expanded README: features, build instructions, screenshots
- Added note that the app was built by reverse-engineering the WebHID driver
- Corrected clone URL and build flags
๐ Fixes
- Typo: "recomm" โ "recommended" in Angle Snapping / Ripple Control menu labels
Supported mice: Ghero, G23, G24, G23V2, Zero 29, Zero 39 (auto-detected from HID product name)
Full changelog: v0.1.0...v0.2.0
v0.1.0
Full Changelog: https://github.com/romkazor/IncottHIDApp/commits/v0.1.0