This one came out of the suggestion box:

In general, can you comment on what MSKLC cannot do that you could do if you built a keyboard layout "from scratch" via the DDK?

In particular, it appears that ligatures (multi-codepoint sequences) cannot be universally assigned to key combinations. First example: dead-key combinations. This may be due to a "deficiency" in the internal layout structure. Second example: you cannot assign ligatures to SGCaps combinations. (I don't see an obvious reason for this other than MSKLC does not allow you to do it...)

I have also seen mention of the ability to program "extended key states", and the Candadian Multilingual keyboard is indicated as a layout that has them, but when I examine the layout (via MSKLC's .klc file), I see nothing "out of the ordinary". Does MSKLC perhaps "ignore" features that it was not designed to handle?
Your comments eagerly awaited...

This is one of those really hard questions to answer, since I usually think of what stuff can do. But I can answer the specific issues being asked about above. :-)

The first question about dead keys supporting multiple code points is covered in the post Dead keys are not intuitive. The SGCaps issue is also due to such a limitation. Even if the ban were "lifted", the code in earlier versions would not support the feature so you would be left having to make layouts that would only work in some versions of Windows.

MSKLC does not allow these things in its UI for the same reason that MSKLC does not have a button that says repeal the law of gravity. Because some features it makes no sense to add unless you can deliver the goods....

Now the addintional shift states are a feature supported by the DDK that MSKLC does not support. It is fair to say that this is a feature (as implemented by the Canadian Multilingual Standard that is difficult and dangerous given the large number of soft keyboards and laptop keyboards that do not have a Right Control key at all -- it means that any characters you assign to those keystrokes will not be available to all users!

As you suggested, MSKLC does not interrogate the keyboard to learn of features that it cannot itself support.

Other features that are not supported in the currently shipping version would include:

  • other keys such as the bulk of the numeric keypad and the function keys; those are things that are supported by the DDK;
  • specifying a language outside the list of those supported in the .NET Framework (version 1.1)
  • IA64 and x64 builds of keyboards for those versions of Windows

Beyond that, it is easier to ask if a feature is supported or not so I can answer....