ToUnicodeEx:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646322(v=vs.85).aspx
ToUnicode:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646320(v=vs.85).aspx
Кажется, что единственное различие между ними состоит в том, что ToUnicodeEx разрешает передачу входного параметра идентификатора языкового стандарта, а ToUnicode — нет.
Мой вопрос: сам ToUnicode вызывает ToUnicodeEx?
Кроме того, в нижней части страницы ToUnicodeEx msdn, в разделе замечаний, мы видим:
Поскольку ToUnicodeEx транслирует код виртуальной клавиши, он также изменяет состояние буфера клавиатуры режима ядра. Это изменение состояния влияет на мертвые ключи, лигатуры, ввод ключей alt + numpad и т. Д. Это может также вызвать нежелательные побочные эффекты, если используется в сочетании с TranslateMessage (который также изменяет состояние буфера клавиатуры режима ядра).
Кто-нибудь знает точно, что делает буфер режима ядра kb?
ToUnicode
а также ToUnicodeEx
оба обертки вокруг NtUserToUnicodeEx
и да, единственная разница заключается в конечном параметре, который равен NULL для ToUnicode
и предоставлены пользователем для ToUnicodeEx
,
Поскольку мертвые клавиши используются для генерации символов из нескольких отдельных нажатий клавиш, ОС должна хранить историю, в которой ранее были нажаты мертвые клавиши. Я думаю, что вся эта записка предупреждает вас, что ToUnicodeEx
а также TranslateMessage
оба используют одну и ту же историю — поэтому смешивание вызовов двух функций может привести к ненадежным результатам.
Других решений пока нет …