A Windhawk mod that enables high-resolution smooth mouse wheel scrolling in any application, not just the handful of browsers that Logitech hardcodes.
This is a Windhawk port of igvk/LogiOptionsPlus-InMemoryPatching. It reuses the same proven in-memory patching technique, but delivers it as a single Windhawk mod instead of a version.dll that has to be copied into the install directory and re-applied after every update.
Logitech mice support high-resolution scroll wheel events, which produce pixel-smooth scrolling instead of the chunky three-line jumps you get otherwise. Logi Options+ only enables this for a few hardcoded browser executables (primarily those named chrome.exe and firefox.exe). Every other application -- including Chromium forks that ship under their own name, such as Vivaldi, Brave, and Opera -- is left with coarse scrolling, even though the hardware is fully capable of the smooth behavior.
The mod is injected into the logioptionsplus_agent.exe process by Windhawk. At load time it:
- Scans the agent's executable memory for a version-specific code signature (five known signatures cover agent versions 1.00 through 1.94).
- Locates the hook point a few bytes after the signature, inside the foreground-process check function.
- Allocates a relay page within reach of a 32-bit relative jump, writes a trampoline there, and overwrites the hook point with an
E9jump to it. - A small assembly handler (one per agent version) reconstructs the original register state, calls back into the decision logic, restores the registers the agent expects, and returns to the original code.
The decision logic decides, per foreground application, whether smooth scrolling should be active. The agent's built-in browser detection is always consulted first and preserved -- the mod only ever adds applications to the smooth-scrolling set, it never removes what Logitech already handles.
When the mod is disabled or removed, the original bytes are restored cleanly, so the agent keeps running without a restart.
- Install Windhawk if you do not already have it.
- Make sure Logi Options+ is installed and its background agent (
logioptionsplus_agent.exe) is running. - In Windhawk, create a new mod, paste the contents of
logioptionsplus-smooth-scroll.wh.cpp, and compile. - Enable the mod. The agent is patched immediately -- no restart required.
The mod exposes two settings in the Windhawk UI.
Additional applications -- executable filenames (without a path) for which smooth scrolling should be enabled. Wildcards * and ? are supported. The defaults include common Chromium-based browsers that the agent does not detect on its own.
Excluded applications -- executable filenames for which smooth scrolling should be explicitly disabled. This overrides both the additional applications list and the agent's built-in browser detection. Wildcards * and ? are supported.
For each foreground application, the outcome is decided in this order:
- The application matches the excluded list -> smooth scrolling off (highest priority).
- The agent's built-in browser detection matches -> smooth scrolling on.
- The application matches the additional list -> smooth scrolling on.
- No match -> smooth scrolling off.
| Entry | Effect |
|---|---|
vivaldi.exe |
Enable smooth scrolling for Vivaldi |
code.exe |
Enable smooth scrolling for VS Code |
* |
Enable smooth scrolling for every application |
notepad?.exe |
Match notepad.exe, notepad2.exe, etc. |
Put a pattern in Excluded applications to carve out an exception, for example to keep a specific app on coarse scrolling even though it would otherwise match.
The mod targets all currently known Logi Options+ agent versions (internal markers V100 through V194). If a future agent release changes the relevant code, none of the signatures will match and the mod will quietly do nothing -- it will not crash the agent. If that happens, the signatures need to be updated against the new build.
- Architecture: 64-bit (amd64) only.
- Target process:
logioptionsplus_agent.exe. - No files written to disk. Everything happens in memory.
- No reconfiguration after Logi Options+ updates. Windhawk re-injects automatically.
If smooth scrolling does not work after enabling the mod, check the Windhawk log output (or a tool such as DebugView). The mod logs:
- which signature was matched and at what address,
- how many enabled/disabled entries were loaded from settings,
- each time an application matches an entry from either list, with the pattern that matched.
The handler deliberately does not log on every foreground change. It runs on a path the window manager is timing, and logging there is expensive enough to interfere with fullscreen transitions.
If you see no matching signature found, the installed agent version is not covered by the current signatures. If settings show 0 enabled, the application list did not load -- verify the entries in the Windhawk settings UI.
Note that not every fullscreen or taskbar oddity is caused by this mod. Firefox had a Gecko bug where the Windows taskbar stayed visible when a tab went fullscreen while a Picture-in-Picture window was open (bug 2048501), reproducible on a clean profile with no add-ons. Rule out the browser before suspecting the mod.
- Original project and reverse-engineering work: igvk/LogiOptionsPlus-InMemoryPatching.
- Windhawk modding framework: ramensoftware/windhawk.
MIT, matching the license of the original project.