Add Windows support and Korean localization#93
Conversation
There was a problem hiding this comment.
ℹ️ No critical issues — minor suggestions inline.
Reviewed changes — a substantial first cut at Windows support (HID transport, mouse hook, Bluetooth pairing, startup handling, input synthesis) with a full Korean localization and CJK-aware layout fixes. 42 files changed across every major subsystem.
- Windows HID++ transport — new
WindowsHidppChannelcomposites short+long collections;NativeHidWriterprovides a Win32 fallback whenasync-hidwrites fail - Windows mouse hook —
WH_MOUSE_LLimplementation inopenlogi-hook/src/windows.rswith foreground process path query - Windows Bluetooth pairing — WinRT-based BLE enumeration and pairing via
DeviceWatcher/PairAsync - Windows input synthesis —
SendInput-based helpers inopenlogi-core/src/binding.rswith macOS→Windows VK code mapping - Windows startup-at-login —
reg.exe-basedRunregistry key management - Device enumeration fix — receiver slots that claim online but don't respond to HID++ probes are now marked offline
- Korean localization — full
kocolumn inlocales/app.yml, locale detection, and test assertions - CJK layout fixes — wider panels,
line_heighton text, vertical language row, centered accessibility footer, platform-aware launch descriptions cfgmigration — all#[cfg(not(target_os = "macos"))]stubs updated to#[cfg(not(any(target_os = "macos", target_os = "windows")))]
Note: 1 inline comment(s) dropped because they did not anchor to lines inside the PR diff:
crates/openlogi-hook/src/tests.rs:56(RIGHT) — line 56 (RIGHT) is not inside a diff hunk
Big Pickle (free) (credentials for Anthropic not configured) | 𝕏
|
Pullfrog stalled The agent stopped emitting events for 302s and was killed by the activity-timeout watchdog. 45507 events were processed before the failure. Recent agent stderr
|
|
Pullfrog stalled The agent stopped emitting events for 305s and was killed by the activity-timeout watchdog. 1834 events were processed before the failure. Recent agent stderr
|
230257f to
c73e9ee
Compare
Greptile SummaryThis PR adds Windows platform support to OpenLogi, including HID++ device discovery via native Win32 HID APIs, a Confidence Score: 5/5The Windows platform layer is well-structured and all previously-identified concerns have been correctly resolved in this revision. Every formerly-flagged issue has been addressed: injected synthetic events are now filtered via LLMHF_INJECTED preventing hook re-entrancy, WinRT apartment initialization is balanced by a WinrtApartment RAII drop guard, NTSTATUS codes are formatted as raw hex integers, the Windows Bluetooth button is gated behind cfg!(target_os = "windows"), and error detail in the add-device window now pattern-matches on enum variants directly. The new SendInput dispatch, NativeHidWriter write-method fallback chain, and registry-based launch-at-login all follow correct Win32 idioms. No logic errors or resource leaks were identified. No files require special attention. Important Files Changed
Reviews (4): Last reviewed commit: "fix: ignore injected Windows mouse event..." | Re-trigger Greptile |
c73e9ee to
b13cac6
Compare

Description
This adds a first Windows version of OpenLogi. The goal is to make the app usable on Windows without needing Logi Options+ running in the background.
The Windows path now discovers Logitech HID++ devices through the Windows HID API, supports the main GUI flow, installs a Windows mouse hook for button remapping, and adds Windows-specific pairing and startup handling. I also added Korean translations and fixed a few layout issues that showed up while testing the app in Korean, including the settings language row layout.
I tested this with an MX Master 4 connected through a Logi Bolt receiver after stopping the Logi Options+ agent.
Screenshots
English:
Korean:
What changed
Tested
Tested on Windows with an MX Master 4 connected through a Logi Bolt receiver, with the Logi Options+ agent stopped.
openlogi listdetects the mouse and reads model/battery infoopenlogi diag featuresdumps the HID++ feature tableopenlogi diag dpireads, writes, reads back, and restores DPIopenlogi diag smartshifttoggles SmartShift and restores the previous modecargo fmt --allcargo test -p openlogi-cli -p openlogi-hid -p openlogi-corecargo clippy -p openlogi-cli -p openlogi-hid -p openlogi-core --all-targets -- -D warningscargo build -p openlogi --releasecargo build -p openlogi-gui --releaseThere is still more hardware coverage needed across other Logitech models, Unifying receivers, and direct Bluetooth devices, but the core Windows path is working on real hardware now.