v2.2.0 — Copilot key control, per-app profiles, dual-role keys
Key Remapper v2.2 — control the Copilot key, per-app profiles, dual-role keys.
📥 Install
Download KeyRemapper.exe below and run it. No Python, no installer.
First run: "Windows protected your PC"
Click More info then Run anyway. The executable is not code-signed — a certificate costs
money every year and this is a free project — so SmartScreen flags it. That is a statement about
the certificate and how many people have downloaded this file so far, not about the file itself.
Confirm you got exactly what was published here:
Get-FileHash .\KeyRemapper.exe -Algorithm SHA25644e158dd07c9a9b9d6c1ca109fbe19b2d546778de95515fb5bf35c52805b48a0
Would rather not trust a stranger's binary? Build it yourself — pip install -r requirements.txt
then python build.py. The README spells out what this app does with your
keystrokes: your typing
is never logged, and it makes no network connections.
Administrator rights are optional; you only need them for windows that themselves run
elevated (some games). Your settings live in %APPDATA%\KeyRemapper\.
🤖 Take back the Copilot key
The Copilot key isn't a real key — the keyboard firmware fires a hidden Shift+Win+F23 chord,
which is why "just block F23" does nothing and why swallowing it pops the Start menu.
The new Copilot Key tab detects the exact chord your laptop sends, then lets you:
- Give back the key it replaced — one click for Right Alt, Windows, Menu ▤ or
Right Ctrl - Disable it entirely, Start-menu side effect included
- Send any keys, launch a program or file, or open a website
✨ Also new
- Per-app profiles — scope any mapping or block to a single
.exe - Tap vs hold — CapsLock can send Escape when tapped and act as Ctrl when held
- Pause hotkey — suspend every mapping without stopping the remapper
- Mouse side buttons —
mouse3/mouse4/mouse5as sources - Run at logon, start in the tray, and a Settings tab
- Edit mappings in place with conflict warnings
- 🎯 Detect now uses the low-level hook, so Win and Copilot combinations are detectable
🐛 Fixed
These made previously advertised features silently do nothing:
- Modifier combinations never matched. Win wasn't tracked, and the hook's
VK_LSHIFTwas
compared against the genericVK_SHIFTthat key names parse to — so everyctrl+/win+
rule was dead, including v2.0's "blockwin+shift+f23". - Settings never persisted from the .exe. The config was written next to
__file__, which
in a one-file build is a temp folder Windows deletes on exit. Now%APPDATA%\KeyRemapper\,
migrating any existing config once. - The hook could be dropped by Windows — it was installed on a thread that then blocked,
exceedingLowLevelHooksTimeout. It now owns a dedicated message-pump thread. - A pointer bug in
dwExtraInfothat could fault on input injected by other apps. - Cross-thread UI callbacks were lost (
tkinter.after()off the main thread). - Logging restored —
%APPDATA%\KeyRemapper\key_remapper.log. - Administrator warnings on load removed.
Backed by 61 unit tests (python -m unittest discover -s tests).
Full changelog: 47ef2c0...v2.2.0