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


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

  • 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
    May 3, 2017 at 22:21
  • @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. May 4, 2017 at 10:33
  • 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
    May 6, 2017 at 13:02
  • @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. May 6, 2017 at 14:19

1 Answer 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:


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:\


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:\

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 LM¹HM²00 00 Header: Mappings count (c) + 1 (for the trailer)
in little-endian byte order, i.e. at least 01 00 00 00
12 … s c × 4 LN¹HN²LO HO New / Old scancodes
in little-endian byte order (s = 11 + c × 4)
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:


MSKBLC works with Windows' DPI Settings of 100 % only (see Sam Arutuk's answer to my question Any ideas why Microsoft Keyboard Layout Creator 1.4 refuses to work properly on my Windows 7 Professional 64-Bit?):

MSKBLC...working with 100% DPI

Apparently the keys can't be remapped.

  • 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. Apr 9, 2017 at 0:11
  • 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
    Apr 9, 2017 at 0:26
  • 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
    Apr 9, 2017 at 0:28
  • @barlop There's the source. SE is a collaborative site. Feel free to edit whatever you want. Good Bye! Apr 9, 2017 at 0:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.