Подобный вопрос уже задали, таким образом, я не пропадаю зря время, повторно объясняя это, существующее обсуждение может быть найдено здесь: ToAscii/ToUnicode в захвате клавиатуры уничтожает мертвые клавиши
Причина я отправляю новый вопрос однако, состоит в том, что я, кажется, столкнулся с 'решением', но я не совсем уверен, как реализовать его.
Это сообщение в блоге, кажется, предлагает решение проблемы ToUnicode, уничтожающего поддержку мертвой клавиши: http://www.siao2.com/2005/01/19/355870.aspx
Однако я не уверен, как реализовать предложенное решение. Нажатие в правильном направлении значительно ценилось бы.
Чтобы быть ясной, часть, к которой я обращаюсь, является этим:
Существует два способа работать вокруг этого:
1) Можно продолжать называть ToUnicode с той же информацией, пока это не убрано, и затем назовите его еще раз для откладывания состояния, где это было, если Вы ничего никогда не вводили, или
2) Можно загрузить всю информацию о клавиатуре заранее и затем когда они вводят информацию, можно искать в собственном информационном кэше, что нажатия клавиш означают, не имея необходимость назвать API позже.
Я не совсем уверен, как сделать любую из тех вещей (клавиатуры, и интернационализация далеки от моей сильной стороны), таким образом, любая справка значительно ценилась бы.
Спасибо
Первая часть ответа полностью лишена информации. Однако вторая часть имеет смысл. ToUnicode()
должна быть чистой функцией, которая просто действует как поиск. Однако это не так. Но вы можете вызывать ее многократно для всех ожидаемых входов, хранить их в собственной таблице поиска и обращаться к ней.
Я бы рекомендовал Microsoft добавить флаг lookDontTouch
к параметру wFlags
; это было бы тривиальным не ломающим API исправлением.
Если вы расширите область поиска, включив в нее регистрацию ключей , вы можете получить некоторые ответы. Представленный в ссылке метод чрезвычайно громоздок по сравнению с ToUnicode
, но он работает. Он развивается вокруг поиска текущей активной раскладки клавиатуры из реестра, а затем вручную загружает и анализирует правильную DLL.
В качестве предупреждения: я видел, как часть загрузки с треском провалилась в 64-битной Windows.