Skip to content

Instantly share code, notes, and snippets.

@joshschmelzle
Last active August 8, 2024 12:28
Show Gist options
  • Save joshschmelzle/5e88dabc71014d7427ff01bca3fed33d to your computer and use it in GitHub Desktop.
Save joshschmelzle/5e88dabc71014d7427ff01bca3fed33d to your computer and use it in GitHub Desktop.
Remap Caps Lock to Control on Windows 10

Ways to remap caps lock to control on Windows 10

These methods in this gist worked for me on my U.S.-based keyboard layouts. I am unsure about other layouts. If you have problems, revert your changes; delete the registry key you created (and reboot).

Update: you should probably scroll down to approach 4 where I suggest using Microsoft PowerToys Keyboard Manager.

Approach 1. Manually through regedit

Navigate to and create a new binary value in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout named Scancode Map.

You will enter the raw bytes like this (thanks @quapka):

00 00 00 00 00 00 00 00 02 00 00 00 1d 00 3a 00 00 00 00 00

Save. Reboot. Done.

Approach 2. Make your own registry key file.

Thanks @datsuka-qwerty

Create a new .reg file and name it something meaningful like capstoctrl.reg. Edit the file and paste in the following:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00

Save. Run the file. Reboot. Done.

Approach 3. Through PowerShell (as Administrator)

Open PowerShell as an administrator (Win + X)

$hexified = "00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00".Split(',') | % { "0x$_"};

$kbLayout = 'HKLM:\System\CurrentControlSet\Control\Keyboard Layout';

New-ItemProperty -Path $kbLayout -Name "Scancode Map" -PropertyType Binary -Value ([byte[]]$hexified);

Save. Reboot. Done.

Approach 4. Microsoft PowerToys

Give PowerToys a try for remapping not only capslock, but other keys as well. Microsoft PowerToys: Utilities to customize Windows 10.

Microsoft PowerToys: Keyboard Manager enables you to redefine keys on your keyboard.

@quapka
Copy link

quapka commented Mar 28, 2020

For the non-Windowsy people like me. Once you create the new binary value called "Scancode Map" just enter the raw bytes:

00 00 00 00 00 00 00 00 02 00 00 00 1d 00 3a 00 00 00 00 00

@xnzac
Copy link

xnzac commented Oct 20, 2020

PowerShell running as admin works like a charm! Thanks for sharing.

@datsuka-qwerty
Copy link

I made a reg file for my lazy self.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00

@haolly
Copy link

haolly commented Jan 20, 2021

If anyone wants to revert/undo this change like me, just delete the registry key, and then restart PC.

@emil-andersen
Copy link

hey maybe a dumb question, how do we do the opposite? My keyboard just had a life on its own

@joshschmelzle
Copy link
Author

@emil-andersen - try deleting the registry key you created and restart.

@oatberry
Copy link

PowerToys is very cool, thanks for this!!

@joshschmelzle
Copy link
Author

anyone know what could be the issue for different binary for same windows10?

I think the differences in the hex you listed are because that also includes remapping the esc key which this gist does not cover.

If raerav's approach doesn't do what you need, I suggest remapping with PowerToys before wasting too much time on it.

https://docs.microsoft.com/en-us/windows/powertoys/

@khanhicetea
Copy link

khanhicetea commented Sep 18, 2021

Approach 3. Through PowerShell (as Administrator) is the best way

It's better than PowerToys, in some programs, it can detect Capslock is pressed, like you can try 2 methods in https://en.key-test.ru/

@qisoster
Copy link

How about remapping the 'CapsLock' key to 'Shift' instead of 'Control'? Thanks.

@joshschmelzle
Copy link
Author

@joshschmelzle
Copy link
Author

What @khanhicetea said is true though. PowerToys method does not work 100% of the time.

@khanhicetea
Copy link

@qisoster Try this (power shell method)

$hexified = "00,00,00,00,00,00,00,00,02,00,00,00,1d,00,2a,00,00,00,00,00".Split(',') | % { "0x$_"};

$kbLayout = 'HKLM:\System\CurrentControlSet\Control\Keyboard Layout';

New-ItemProperty -Path $kbLayout -Name "Scancode Map" -PropertyType Binary -Value ([byte[]]$hexified);

Explained here : https://renenyffenegger.ch/notes/Windows/registry/tree/HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Keyboard-Layout/index

Note: I changed 3a to 2a because 2a is hex code of Uncaps_Shift

@kittywitch
Copy link

The example provided that is a registry file omits the

Windows Registry Editor Version 5.00

parts of the file. This makes it not work verbatim. The user who posted it even included that section. Please include it.

@joshschmelzle
Copy link
Author

@kittywitch thanks for catching that. I updated the gist.

@xianmin
Copy link

xianmin commented May 24, 2022

Swap CapsLock & Ctrl :

$hexified = "00,00,00,00,00,00,00,00,03,00,00,00,1d,00,3a,00,3a,00,1d,00,00,00,00,00".Split(',') | % { "0x$_"};

$kbLayout = 'HKLM:\System\CurrentControlSet\Control\Keyboard Layout';

New-ItemProperty -Path $kbLayout -Name "Scancode Map" -PropertyType Binary -Value ([byte[]]$hexified);

@rover-random
Copy link

I tried approach 3. It worked for a couple minutes, and now all the sudden caps lock does nothing. What could have gone wrong?

@avlm
Copy link

avlm commented Oct 3, 2022

PowerToys worked pretty fine for me! thanks!

@nosrednayduj
Copy link

Powertoys did not allow remapping of caps lock to "just control". It prompted me to add another key to the sequence after I selected Ctrl.

@rover-random
Copy link

@nosrednayduj once you select ctrl, in the next box that opens up, scroll all the way to the top and select 'None'.

@pythonincloud
Copy link

The above solutions left me without an option to use the CapsLock itself.
This is a reg file to remap CapsLock to CTRL and CTRL ot CapsLock.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,1d,00,3a,00,3a,00,1d,00,00,00,00,00

@asierrayk
Copy link

How do i map it to the right control, in order to be able to diferenciate keys in games?

@eric-gitta-moore
Copy link

For me, Ctrl2Cap is currently the most reliable solution. The registry key "Scancode Map" does work in Windows 10, but strangely stopped working for the Ctrl-X keystroke in particular. The PowerToys Keyboard Manager works, including Ctrl-X, but doesn't work over remote desktop (and running it on the remote PC as well as the local one doesn't seem to let you remap successfully). Ctrl2Cap is remapping in all applications including remote desktop.

https://superuser.com/a/1389340

@karimb
Copy link

karimb commented Sep 5, 2023

The registry key hack works in Windows 7 too.

@GhasemSoleimani
Copy link

Is it impossible to change it for changing keyboard language? (ALT+SHIFT OR WIN key+Space)

@LifeJustDLC
Copy link

LifeJustDLC commented Apr 13, 2024

@joshschmelzle
Copy link
Author

@life-is-dlc what are you talking about? PowerToys is an actively maintained tool by Microsoft. If you have a problem with their tool, go complain on their repo, not here.

@LifeJustDLC
Copy link

I just can't agree with the term "actively maintained" you're using, since the problem I listed is 3 years ago. Also it is very specific to your solution for switching caps and ctrl. If you're going to use it to switch any keys else, probably fine though I didn't tested.
I'm curious-only in the debug purpose-haven't you run into any problem the issue mentioned? (In case you didn't want to click the link, I edit my post to reveal their titles.)

@LifeJustDLC
Copy link

Maybe my wording of "defective" is not accurate. Sorry about that. English is not my first language. I'm still learning it.

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