FAQ & troubleshooting

Short answers to what comes up most. Everything here is on one page — use your browser’s find.

Remapping doesn't work in one specific window

If that window runs as administrator, Windows blocks input from non-elevated programs (UIPI). Run WinRemap elevated too if you really need remapping there. Games with anti-cheat and some virtualization software also ignore injected input.

How do I check what is actually in effect?

Right-click the tray icon and pick Settings. It shows the config WinRemap is resolving against right now — every keymap, its target apps and exclusions, and its rules, each with the comment you wrote beside it in the file. Where the same input is bound in more than one keymap, a column names the others, since only one of them can win.

Press Edit and the same window becomes an editor for the file: rules are checked as you type, saving validates the whole config before it writes a byte, and everything you did not touch — comments, blank lines, ordering, spellings — comes back unchanged. Remapping keeps running the whole time.

My rule doesn't match — how do I debug it?

Right-click the tray icon and pick Show log. It names the config file it loaded, shows the exact application value for each foreground window, and gives one stamped line per key saying what WinRemap did with it (pass-through / remap / macro / prefix) — C-h (BS 0x08) → remapped to Back (BS 0x08). Tick Every event to see the whole stream instead: every press and release, and everything WinRemap sent in reply. Prefer a terminal? Start WinRemap with winremap.exe --debug and the same lines go there instead; without that flag it prints nothing. Debug output never includes typed text and is never written to disk.

--debug opens a console window of WinRemap's own. Nothing else writes to it, so nothing overwrites the log; it is there from the first line of startup, which the log window cannot show you because it can only be opened once startup is over; and it stays after WinRemap exits, so the shutdown lines can be read instead of vanishing with the process. Close the window, or press Enter, when you are done.

Closing that window while WinRemap is still running ends WinRemap — that is what the flag is for. Redirecting the output writes the transcript to the file and opens no window, but neither shell's > can do it: PowerShell closes the pipe as soon as WinRemap goes resident, and cmd never hands its redirected handles to a GUI-subsystem child at all — either way the file stays empty. Use Start-Process winremap.exe -ArgumentList '--debug' -RedirectStandardOutput log.txt (Git Bash's > works too).

Can I use it together with Keyhac / AutoHotkey?

Not recommended for the same keys: stacked low-level keyboard hooks have undefined ordering, so behavior becomes unpredictable. Disable one while testing the other.

How do I turn autostart on or off after installing?

It depends on how you installed it — Windows manages autostart differently for Store packages than for the installer.

Microsoft Store version: right-click WinRemap in the Start menu and choose App settings. That opens Settings → Apps → Installed apps → WinRemap, where the Runs at log-in toggle turns it on and off. The same switch is in the Settings → Apps → Startup list, but the right-click gets you there faster.

Installer and portable versions: press Win+R, run shell:startup, and add or remove the WinRemap shortcut there. (Re-running the installer also lets you re-choose the option.) This shell:startup route does not work for the Store version, whose autostart Windows keeps in the place described above instead.

A macro types too fast for the target app

Set delay_ms = 8 under [macro] (0–15) — some apps sample input asynchronously and drop burst-injected strokes.

Where does WinRemap store things?

Program: %LOCALAPPDATA%\Programs\WinRemap (installer) or wherever you put the portable exe. Config: %APPDATA%\winremap\config.toml. That's all — no services, no drivers, no registry settings.

The Store version lives where Windows puts packaged apps, and gets a private copy of %APPDATA% with it — so a fresh Store install keeps the config under %LOCALAPPDATA%\Packages\SUGANUMADaiki.WinRemap_pktmgf1zdhxe0\LocalCache\Roaming\winremap\. You don't have to remember that: the settings window names the folder it is actually using and opens it in Explorer for you.

How do I verify my download is genuine?

Compare the SHA-256 hash against SHA256SUMS from the release, and check the build-provenance attestation with the GitHub CLI:

(Get-FileHash .\winremap-setup.exe -Algorithm SHA256).Hash.ToLower()
    gh attestation verify .\winremap-setup.exe --repo DaikiSuganuma/winremap
    

Details in SECURITY.md. The Store version needs none of this — Microsoft signs it, and the Store page names the publisher. Binaries from anywhere other than these two channels are unofficial.

Microsoft Store or GitHub — what's the difference?

Same build, same source, same version. Three practical differences:

  • No SmartScreen warning from the Store — Microsoft signs the package. The GitHub binaries are unsigned, so Windows may warn about a new download.
  • Updates arrive on their own from the Store. With GitHub you download the new version yourself.
  • The config file sits somewhere else. Windows gives packaged apps a private copy of %APPDATA%, so a fresh Store install keeps config.toml under its own package folder rather than %APPDATA%\winremap\. The settings window shows you the folder it is using either way.

Switching is safe: if you already have %APPDATA%\winremap\config.toml from the installer, the Store version keeps using that file, so your rules come with you. Only the GitHub route offers a portable single exe. See the install guide.

I wrote "C-@" and got an error. Why?

Because on your keyboard @ is not a key — it is Shift+2. Write the Shift into the rule:

"C-S-2" = "Esc"

WinRemap tells you this, with the spelling to use, rather than adding the Shift behind your back — otherwise C-@ and C-S-2 would be the same rule on your machine and different rules on someone else's.

On a Japanese keyboard @ is a key of its own, and "C-@" works there. Symbol keys are written the way they are engraved, and which key that is depends on the keyboard — the configuration guide explains it.