Как я могу использовать ToUnicode, не ломая поддержку мертвого ключа? - PullRequest
5 голосов
/ 09 апреля 2010

Подобный вопрос уже задавался, поэтому я не собираюсь тратить время на его объяснение, здесь можно найти существующее обсуждение: ToAscii / ToUnicode в хуке клавиатуры уничтожает мертвые клавиши

Причина, по которой я публикую новый вопрос, заключается в том, что мне кажется, что я нашел «решение», но я не совсем уверен, как его реализовать.

Этот пост в блоге предлагает решение проблемы с поддержкой мертвых ключей в ToUnicode: http://www.siao2.com/2005/01/19/355870.aspx

Однако я не уверен, как реализовать предложенное решение. Толчок в правильном направлении был бы очень признателен.

Для ясности, часть, на которую я ссылаюсь, такова:

Есть два способа обойти это:

1) Вы можете продолжать вызывать ToUnicode с той же информацией, пока она не будет очищена, а затем вызвать его еще раз, чтобы вернуть состояние, где оно было, если вы никогда ничего не печатали, или

2) Вы можете загрузить всю информацию о клавиатуре заранее, а затем, когда они набирают информацию, вы можете посмотреть в собственном информационном кэше, что означают нажатия клавиш, без необходимости вызывать API позже.

Я не совсем уверен, как сделать что-либо из этого (клавиатура и интернационализация далеки от моей сильной стороны), поэтому любая помощь будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

4 голосов
/ 09 апреля 2010

Первая часть ответа полностью без информации. Тем не менее, вторая часть имеет смысл. ToUnicode() должен быть чистой функцией, которая просто выполняет функцию поиска. Однако это не так. Но вы можете вызывать его повторно для всех ожидаемых входных данных, сохранять их в своей собственной справочной таблице и получать к ней доступ.

Я бы порекомендовал Microsoft добавить флаг lookDontTouch к параметру wFlags; это было бы тривиальным исправлением API.

0 голосов
/ 18 апреля 2010

Если вы расширите свой поиск, включив в него регистрация ключей , вы можете получить ответы на некоторые вопросы. Метод, представленный в ссылке, чрезвычайно громоздкий по сравнению с ToUnicode, но он работает. Он развивается вокруг поиска текущей активной раскладки клавиатуры из реестра, а затем вручную загружает и анализирует правильную DLL.

В качестве предупреждения я видел сбой загрузки части в 64-битной Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...