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

1

... 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?.

GeroldBroser reinstates Monica

Posted 2017-04-08T23:33:09.513

Reputation: 405

just for your information: using the RemapKey-Tool from the Windows Server 2003 Resource Kit Tools, you can remap the keys without manually altering the registry. I'm actually going to do that when my second Ultra Classic arrives (this new layout is so stupid...) – MFH – 2017-05-03T22:21:34.030

@MFH Thanks for the info. Though, I knew that. The real issue here is that I have to set/reset the Registry settings and reboot every time I want to switch to my laptop's internal keyboard and vice versa. With MSKLC I could switch the "language" and its assigned keyboard layout on the fly. – GeroldBroser reinstates Monica – 2017-05-04T10:33:16.817

Ok, that's obviously a problem - but how does MSKLC fix that? The last time I tried it, it didn't allow WinKeys to be remapped... – MFH – 2017-05-06T13:02:36.060

@MFH Yes, that's exactly what I read in comments/answers to questions regarding this and I wanted to try whether this still holds true. – GeroldBroser reinstates Monica – 2017-05-06T14:19:36.067

Answers

1

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:

GeroldBroser reinstates Monica

Posted 2017-04-08T23:33:09.513

Reputation: 405

1@barlop I'm not sure whether the German source I have this from is welcomed here on English-speaking SE. What do you exactly mean by "how you produced that"? With a simple text editor? Commas are separators in series of words. In my 38-year-long life as a developer I've never seen any programming language – and I've seen quite a few – with parameter passing containing a file extension of .reg. If you don't like them feel free to change them according to your preferences when you save the files. – GeroldBroser reinstates Monica – 2017-04-09T00:11:06.137

The main point- where did you get the idea that there are a sequence of about 8 pairs of 0s, followed by the code 38 e0 5c ... followed by a certain number of 00s. How did you know how many 00s before the code, and how many after.. how did you know what code in between them. You state nothing about that. – barlop – 2017-04-09T00:26:40.397

And regarding the secondary point. It's when reading far into that massive filename that you can even see it's a filename. Before then it looks like it might be passing parameters to a program partly 'cos it's rare to put commas in a filename. – barlop – 2017-04-09T00:28:01.073

@barlop There's the source. SE is a collaborative site. Feel free to edit whatever you want. Good Bye!

– GeroldBroser reinstates Monica – 2017-04-09T00:31:40.743