Friday, 7 September 2018

windows - How to remap Right-Win and Right-Alt keyboard keys


... on a Unicomp Ultra Classic Buckling Spring keyboard in particular.


I recently bought one of these IBM Model M revivals. A great keyboard with one slight flaw: there are no Power, Sleep, Wake keys and a rather big flaw: they decided to swap the Right-Win and the Right-Alt keys so that it looks like:


  Space    Alt  Ctrl


With many years of using a different layout this is uncomfortable, of course.


I tried Microsoft Keyboard Layout Creator (MSKLC) 1.4, but it refuses to work properly on my Windows 7 Professional 64-Bit: it doesn't display the layout after FileLoad Existing Keyboard...:


Empty MSKLC


See also Any ideas why Microsoft Keyboard Layout Creator 1.4 refuses to work properly on my Windows 7 Professional 64-Bit?.



Answer



Since Microsoft Keyboard Layout Creator (MSKLC) 1.4 fails to work properly you can use the following low-level solution that is derived from information on (German) WinFAQ.


Create the following two .reg files with a text editor of your choice and execute them alternately to load the given keys/values into your Windows' Registry:


HKLM^SYS^CCS^CTRL^Kbd_Layout^Scancode_Map#Swap_R-Win_R-Alt.reg


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,\
38,e0,5c,e0,\
5c,e0,38,e0,\
00,00,00,00

HKLM^SYS^CCS^CTRL^Kbd_Layout^Scancode_Map#Reset.reg


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,\
01,00,00,00,\
00,00,00,00

Note the reversed order of LSB (least significant byte) and MSB (most significant byte) within the 2 bytes of a scancode, a.k.a. little-endian. Note also the backslash character (\) for line continuation.


You have to restart Windows/reboot your machine for a change of mappings to take effect.


Technical Background Info


Scancode Map entry:


┌──────────┬──────┬─────────────┬───────────────────────────────────────────────────┐
│ Bytes | Size | Values │ Description │
├──────────┼──────┼─────────────┼───────────────────────────────────────────────────┤
│ 0 … 3 │ 4 | 00 00 00 00 │ Header: version info, always all 0 │
│ 4 … 7 │ 4 | 00 00 00 00 │ Header: flags, always all 0 │
│ 8 … 11 │ 4 | 0m 00 00 00 │ Header: mappings count[c] + 1 [for the trailer] │
│ 12 … s │ c×4 | LN¹HN²LO HO │New /Old scancodes in little-endian byte order │
│ t … t+3 │ 4 | 00 00 00 00 │ Trailer (t = s + 1 = 12 + c × 4) │
└──────────┴──────┴─────────────┴───────────────────────────────────────────────────┘


¹ L ... low byte, least significant byte (LSB)
² H ... high byte, most significant byte (MSB)


See the following pages/documents for scancodes:



No comments:

Post a Comment

Where does Skype save my contact's avatars in Linux?

I'm using Skype on Linux. Where can I find images cached by skype of my contact's avatars? Answer I wanted to get those Skype avat...