Обнаруживаете определенные клавиши на клавиатуре AZERTY?
У меня есть проблема в программе, где я обнаруживаю нажатия клавиш. Все символы работают на клавиатурах QUERTY, но мне известны проблемы с определенными символами на клавиатурах AZERTY.
Например, когда \ нажимается на клавиатуре AZERTY, ему присваивается код клавиши 226 (â).
Как я могу гарантировать, что поведение одинаково для всех раскладок клавиатуры? Я ожидал, что встроенная обработка событий будет последовательной.
3 ответа
Возможно, вы захотите сначала определить раскладку клавиатуры, а затем использовать другой код клавиши для сопоставления символов.
Да, разные раскладки клавиатуры дают разные коды клавиш. Документация описывает VK_OEM_102
(код 226) как "<>" or "\|" on RT 102-key keyboard
поэтому код клавиши даже не должен соответствовать какому-либо конкретному символу.
Чтобы увидеть, какому символу соответствует клавиша, используйте функцию MapVirtualKey. Затем вы можете проверить, является ли это обратной косой чертой.
Я не могу воспроизвести это вообще. Обратная косая черта составляется на клавиатуре AZERTY, удерживая нажатой клавишу AltGr, а затем нажимая клавишу 8 в ряду цифр над буквами. Когда вы делаете это следующее KeyDown
События запускаются:
- KeyCode: Menu, KeyValue: 18 для понижающего AltGr
- KeyCode: D8, KeyValue: 56 для 8 понижается
С другой стороны, если вы нажмете клавишу слева от W, то KeyDown
с KeyCode OemBackslash и KeyValue 226 запускается, и <
символ появляется в текстовом поле.
Интересно, неправильно ли установлена раскладка клавиатуры для вашей конкретной клавиатуры. Я предполагаю, что ваша клавиатура выглядит как изображение на этой странице Википедии: http://en.wikipedia.org/wiki/AZERTY