I'm not gonna lie. I built this for a dumb and very lazy reason. Sometimes I'm leaned back in my chair and don't wanna lean forward to use my keyboard, and the onscreen keyboard was weirdly slower than this. That being said, I could see this being useful for lazy people like myself, and for people who have impairments that don't allow them to use a keyboard normally. I "authored" a lot of this using Claude, but if it gets attention, I might try and keep it up to date and add things like better punctuation or an actual T9 prediction implementation.
A floating on-screen multi-tap keyboard for Windows (picture an old flip phone), designed for use with gaming mice that have programmable side buttons (e.g. Razer Naga V2 HyperSpeed). Type text into any application without lifting your hand from the mouse.
Side buttons on your mouse are mapped to F13–F24 (or any keys you choose). The app intercepts those keypresses via a low-level keyboard hook and routes them through a multi-tap state machine — the same input method as classic phone keyboards. A cursor overlay shows the character currently being composed, and a floating keypad window gives visual feedback and lets you click buttons directly as well.
- Multi-tap input — tap a key repeatedly to cycle through its characters (abc, def, etc.)
- Shift / Caps Lock —
*once for next-char uppercase, twice to toggle Caps Lock - Space / 0 —
0once for space, twice for0; if another key is pending, first tap commits it immediately - Backspace —
#key - NumLock mode — toggle to bypass multi-tap and type digits directly
- Cursor overlay — small preview bubble that follows the system cursor
- Floating keypad — always-on-top draggable window with LCD strip, opacity slider, and a slide-out drawer with Enter, Delete, Ctrl+A, arrow keys, and settings
- Fully configurable — rebind any phone key to any physical key, adjust commit timeouts
- System tray — runs in the background with a tray icon; no taskbar entry
- Dark theme — matches Windows accent colour
- Windows 10 / 11
- .NET 8 Desktop Runtime
git clone <repo-url>
cd winmt
dotnet build winmt.sln
Run the app:
dotnet run --project src/winmt.App
Or open winmt.sln in Visual Studio 2022+ / Rider.
| Phone key | Default binding |
|---|---|
| 1 | F13 |
| 2 | F14 |
| 3 | F15 |
| 4 | F16 |
| 5 | F17 |
| 6 | F18 |
| 7 | F19 |
| 8 | F20 |
| 9 | F21 |
| * | F22 |
| 0 | F23 |
| # | F24 |
Bindings can be changed at any time through the Configuration window (right-click the keypad or use the Settings button in the drawer).
src/
winmt.Core/ — State machine, character map, keystroke injector (no UI dependency)
winmt.App/ winmtay icon, keypad window, overlay, configuration
MIT — see LICENSE.