Switch Windows input languages with CapsLock. Keep the real Caps Lock behind Alt+CapsLock. That is the whole product.
CapsLang is a tiny Rust tray binary. It stays out of the way and runs elevated so the remap still works when the focused window is an administrator app.
Grab the latest Windows build from Releases:
| File | Use |
|---|---|
CapsLang-Setup-win-x64.exe |
Installer |
CapsLang-Portable-win-x64.zip |
Unpack and run CapsLang.exe |
CapsLang-SHA256SUMS.txt |
Checksums |
No .NET runtime. No Tauri/WebView bundle — just the CapsLang executable.
| Input | Result |
|---|---|
CapsLock |
Next Windows input language |
Alt+CapsLock |
Toggle real Caps Lock |
Language switching uses WM_INPUTLANGCHANGEREQUEST on the foreground window. CapsLang does not fake Win+Space.
Windows blocks low-level keyboard hooks from a normal process when an elevated window is focused. CapsLang therefore runs as administrator.
- First launch asks for UAC once.
- CapsLang registers a logon scheduled task (
NakornCode\CapsLang) with highest privileges. - Later logons and tray restarts go through that task — no repeated prompts.
Defaults: remap Enabled, Launch on startup, and elevated task registration are all on.
- Enabled — remap on/off
- Launch on startup — enable/disable the elevated logon task
- Help — short overview
- Exit — quit
Settings file: %LOCALAPPDATA%\CapsLang\settings.json
- If PowerToys (or anything else) also remaps CapsLock, turn that remap off.
- Uninstall/disable startup from the tray, or remove the
NakornCode\CapsLangtask in Task Scheduler. - CapsLang is Windows-only.
Needs a Rust MSVC toolchain (stable-x86_64-pc-windows-msvc). Installer packaging also needs Inno Setup 6.
cargo build --release
.\target\release\CapsLang.exeShip assets locally:
.\scripts\publish-release.ps1Output lands in artifacts\release\.
git tag v1.0.0
git push origin v1.0.0GitHub Actions publishes the portable ZIP, Inno installer, and checksums.
MIT