Skip to content

Add Windows support - #17

Open
tran-huy-phuc wants to merge 4 commits into
nilbuild:mainfrom
tran-huy-phuc:main
Open

tran-huy-phuc wants to merge 4 commits into
nilbuild:mainfrom
tran-huy-phuc:main

Conversation

@tran-huy-phuc

@tran-huy-phuc tran-huy-phuc commented Nov 8, 2026 •

Copy link
Copy Markdown

I introduced the app to Vietnamse teachers and they were excited about this app. But almost of them use Windows, not Mac. That's why I decided to port the app to Windows, with Claude Code.

The app also supports Vietnamese. More languages will be added later.

tran-huy-phuc and others added 4 commits November 3, 2026 21:56
desktop/ is a Rust workspace meant to take TinyHand beyond macOS:

- core: platform-free engine ported from the Swift app (hand measuring,
  stick physics, ink, prefs) with a span rasteriser for the hand and rod
  (~1.6 ms/frame at 1080p) and unit tests.
- app: Tauri shell with tray, global shortcuts, toolbar and Settings
  windows (English/Vietnamese), and a Windows overlay: low-level mouse
  hook, keyboard hook that keeps the interact key from apps, blank system
  cursors, layered window, cpal tap sounds.
- marketing: script that renders feature screenshots from the real parts.

.github/workflows/windows.yml builds the NSIS installer on Windows.
The Swift macOS app is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…otkey

The keyboard hook swallowed the release of an interact key whose press it
had never seen. Ctrl+Alt+H presses Alt before the hook exists and releases
it after, so Windows kept Alt down and every key typed became a shortcut.

Never swallow the release of a key the system considers down.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MUL7ii

MUL7ii commented Nov 9, 2026

Copy link
Copy Markdown

Nice work. I built a separate Windows port (#19) and ran it on Windows 11. Your README says yours has not run on Windows yet, so here are a few things I hit that may save you time:

  • Do not call SendInput from inside the WH_MOUSE_LL callback. It stalled all input until Windows timed the hook out. Posting a message to another thread and injecting from there fixed it.
  • A full-screen topmost overlay can end up with keyboard focus when a flyout closes. Handling WM_ACTIVATE and handing focus back fixed it.
  • Clicks on Windows' own popups (context menus, the hidden-icons flyout, Start) need to pass through while the pointer is on, or those menus cannot be used.
  • Some apps (Paint) open above topmost windows, so the overlay needs re-raising on foreground changes.
  • UpdateLayeredWindowIndirect with a dirty rect returned success but did not update the screen for me when called from a non-window thread. Plain UpdateLayeredWindow from the window thread worked.

Happy to test a build on Windows and send results if that helps.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants