ПРИМЕЧАНИЕ: (Это касается сообщений клавиатуры в целом и не относится только к ActionScript. Я неправильно прочитал вопрос и предоставил более глубокий ответ, тогда это было полезно)
Действительно, путь от клавиатуры до Windows Char очень ОЧЕНЬ сложен, он выглядит примерно так:
- Клавиатура отправляет скан-код в драйвер устройства клавиатуры (KDD).
- KDD отправляет сообщение в очередь системных сообщений.
- Затем система отправляет сообщение потоку переднего плана, который создал окно с текущим фокусом клавиатуры.
- Цикл сообщений цепочки принимает сообщение и определяет правильный перевод символов.
«Настоящий» типографский символ, который был напечатан, не рассчитывается до тех пор, пока не завершит весь этот процесс, поскольку каждое окно и поток могут находиться в разных языковых стандартах, и вы не сможете «перевести» ключ без знания локали и буфера ключей. история.
Сообщения "WM_KEYDOWN" и "WM_KEYUP" нельзя просто преобразовать с помощью MapVirtualKey или чего-то еще, потому что вы не знаете, сколько нажатий клавиш составляют один символ. Простой метод - просто обработать событие WM_CHAR и использовать его. Учтите следующее:
- en-US locale, вы нажимаете следующие клавиши a + '+ a, вы получаете следующий вывод "a'a"
- pt-BZ locale, вы нажимаете следующие клавиши a + '+ a, вы получаете следующий вывод "aá"
Таким образом, в обоих примерах вы получите 3 сообщения KEYDOWN, KEYUP, но в первом вы получите 3 WM_CHAR, а во втором - только 2.
Следующая статья действительно хороша для основных понятий:
http://msdn.microsoft.com/en-us/library/ms646267(VS.85).aspx