Как преобразовать сообщение из WH_KEYBOARD_LL в символ юникода corespondig - PullRequest
0 голосов
/ 04 марта 2011

привет Я пишу многоязычное приложение и использую WH_KEYBOARD_LL хук.Мне не важно, почему я использую хук, я пробовал несколько вещей, но это самый простой и быстрый способ сделать это.Теперь внутри ловушки proc

LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam);

я получаю параметр KBDLLHOOKSTRUCT in LPARAM, который содержит информацию для нажатой клавиши.Есть ли способ согласовать эту информацию в юникодном символе в соответствии с текущей раскладкой клавиатуры, которую пользователь установил для ex.если у пользователя установлена ​​китайская раскладка клавиатуры, и он нажимает клавишу «а», тогда я получаю KBDLLHOOKSTRUCT, содержащий код сканирования клавиши «а», и мне нужно преобразовать этот код сканирования в соответствующий символ Unicode.Я знаю, что это возможно, потому что вы можете писать по-китайски в Microsoft Word, я просто не могу понять, как это сделать.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 05 марта 2011

ToUnicodeEx ().На практике это не работает, если раскладка клавиатуры не простая.Мертвые ключи - это то, что убивает тебя.Об этом Майкл Каплан написал 11-серийный блог-сериал , но на самом деле он просто сдался, не закончив его.Посмотрите, что вы можете извлечь из этого, но не надейтесь.Китайцы используют IME, редактор метода ввода.Программное обеспечение, я думаю, оно строит персонажа штрихами.

0 голосов
/ 05 марта 2011

Это преобразование сложно.Даже простые мертвые клавиши раздражают в обращении, и при использовании IME становится очень уродливым.

Рассмотрите возможность перехвата сообщений, когда элемент управления вводом получает уже преобразованный символ.Но, конечно, это намного уродливее для кода.

Проблема в том, что для перехвата обычного сообщения требуется внедрение dll в целевой процесс, и эта dll не должна записываться на C #.Но, возможно, есть какой-то другой API для перехвата сообщений, который работает без внедрения DLL.

0 голосов
/ 05 марта 2011

Может быть что-то вроде MapVirtualKeyEx или ToUnicodeEx.Во всяком случае, я думаю, что функция из раздела ввода с клавиатуры MSDN будет содержать правильную функцию (список из них является коротким).

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