New info about old usability tests

by Michael S. Kaplan, published on 2005/02/10 00:17 -05:00, original URI: http://blogs.msdn.com/b/michkap/archive/2005/02/09/370291.aspx


In prior posts I had talked about shortcuts and accelerators, and especially the difficulties involved with the possible changes that will occur with them as keyboard layouts change, etc.

Well, tonight I was looking at Nadine Kano's book Developing International Software for Windows 95 and Windows NT for something else entirely and happened to find the following text here:

When you design functionality to allow the user to switch keyboard layouts, keep in mind that because the letters on keyboards vary from layout to layout, the keys used to generate shortcut-key combinations might also vary. For example, suppose a user selects French as his default keyboard layout. To sort a list on your application, he presses Ctrl+Z. When he changes the input language to Russian, which activates the Russian keyboard layout, he notices that his list isn't sorting. The Russian keyboard does not contain the letter Z, and the virtual-key codes generated by the Russian layout correspond to the virtual-key codes generated by the US layout, not the French layout. Because of this, the key that produces the letter Z on the French layout produces the virtual-key code for W on the Russian layout. (See the templates in Appendix Q to compare the US and French keyboard layouts.)

Microsoft usability tests have shown that most users would prefer to learn only one set of shortcut-key combinations. When parsing keyboard input, always parse shortcut-key combinations based on the user's default keyboard layout. In other words, first test to see whether the active keyboard layout is the user's default. If it is not, test the shortcut-key combinations against whichever virtual codes correspond to the correct combination on the user's default layout. In the example above, if the Russian keyboard layout is active and your application receives the virtual code for Ctrl+W, it should still activate the sort command. The most efficient way to handle this is to build tables at startup to map between the default keyboard layout and additional layouts installed on the user's system.

I have probably read that book 100 times and I never remembered that text!

But it does make a lot of sense. Assuming that their default keyboard layout matched the actual keys on their keyboard, you could use this knowledge to provide useful maps that matched the physical keys on their keyboards for shortcuts.

It would be interesting to see if this usability data still holds true, especially if it has fallen out of the combined knowledge of MS products (I had never heard it before from any of the program managers of many products that have seen grapple and heard tell of grappling with this problem)....

 

This post sponsored by "٪" (U+066a, ARABIC PERCENT SIGN)


# Dan on 10 Feb 2005 11:14 AM:

If I'm understanding you correctly, this is the same thing I ran into when trying to switch to dvorak for my wrists. Most common shortcut keys are designed for locality - the most notable is cut/copy/paste/undo. All available using one hand. On dvorak the keys get thrown all over the place, and it causes issues. Such a feature would be well recieved, however I get the feeling it could cause some interesting compatibility issues.

# Michael Kaplan on 10 Feb 2005 11:17 AM:

Yes, as a rule any time someone comes up with a great new plan to change the way either shortcuts or accelerators work in order to simplify things, they end up making things more complex due to the need to support yet another new behavior....

# Mark on 15 Feb 2005 7:27 AM:

Do you suggest something like:
0. Get the keyboard scancode (how? similarly to DirectInput or managed by system?)
1. Load default keyboard layout
2. MapVirtualKeyEx() (which reportedly doesn't seem to work on Korean Win98?)
3. Continue with WM_CHAR etc. logic

# Michael Kaplan on 15 Feb 2005 10:25 AM:

Actually, what MSKLC does is run through all the scan codes and get the VK and then the text from every one of them (the latter with ToUnicodeEx). So it can basically load the keyboard layout.

go to newer or older post, or back to index or month or day