Raymond,
At 10:04 AM 4/08/2002 +0100, Raymond Mercier wrote:
>When it comes to setting up a keyboard layout the first thing is to
>distinguish between Win95/98/ME and NT4/Win2000.
>
>In the former the layout is fixed by the file kbd**.kbd, where ** is a
>label for the country/language. This is basically a data file whose format
>is available in the DDK for Windows. Once you know the format and the
>conventions about dead keys, etc., you can write an ordinary C-language
>program to create a new *.kbd file. Strictly speaking the examples of such
>files given in the DDK for Windows show assembly code, but this can
>relatively easily be rewritten as C-code, since it is just data, not a program.
Remember that Windows 95/98/Me keyboard layouts are limited to supported code pages only. They do not support Unicode. This also means that some keyboards do not work on some language versions of Windows 9x.
I also found the Win9x DDK information for keyboard layouts to be somewhat lacking. Some of the information was there, but it took a lot of deciphering to fully understand it.
>In the latter case (NT etc) the layout is fixed by a file kbd**.dll, and to
>create this you need to go through the procedures that are available only
>if you have the whole DDK for Win2000. The file is still just data, but
>since it is transformed into a dll, you cannot just create it with a bit of
>DIY programming. In the DDK there are many header files that define the
>various layers that go into it. Perhaps it is possible to fillet out the
>essential parts to create a stand-alone program which just makes a layout,
>but it would not be easy. Basically you have to subscribe to MSDN, and then
>get the DDK from one of the DVD's.
This information is also available in the free Windows NT/2000/XP DDK download from msdn.microsoft.com -- there is no real documentation in MSDN. The entire file format is defined in kbd.h, included in the DDK. The kbd**.dll file exports a single function, called KbdLayerDescriptor -- you can use the freely available gcc compiler to create this DLL. It is trivial to modify the sample included in the DDK (kbdus) to create your own (e.g. kbdrp).
>The layout provided by tavultesoft is not the same thing. This provides an
>additional layer that takes effect on top of your existing kbd-file. I once
>wrote something about like that, but (in may case at least) it was not as
>efficient as a real change in the kbd file.
Using Keyman will not be as efficient as creating your own Windows keyboard layout -- Keyman does a fair amount of processing with each keystroke. However, that's because it does do a lot more than a Windows keyboard layout can.
If there is significant interest, I will consider adding support for creating a kbdxx.dll to Keyman Developer. Please email me off-list if you are interested.
Cheers,
Marc Durdin
This archive was generated by hypermail 2.1.2 : Sun Aug 04 2002 - 15:00:39 EDT