Another issue with GetKeyNameText is, the strings aren't localized the way you would expect. The language the strings are returned in is tied to the language that is associated with the keyboard layout (since the strings actually come out of the keyboard layout dll), NOT the system language. For instance I have a german installation of windows, but if I switch to the US keyboard layout, the strings returned by GetKeyNameText will be in english.
That's the behavior I want. Maybe I should rephrase that in the main post. The idea is that a game or application should display the character (or string describing the key) of the current keyboard layout, which often correspond to the "hardware layout". If the user changed the layout, he/she should see the names for the new layout.
As for the strings being bad in some languages, maybe we could find (or create) a list of similar strings in all languages (I'm thinking of Linux since those would probably be open source) and create a small function that would find the keyboard layout to be able to return the corresponding string.