Я с помощью GetAsyncKeyState определяю активно нажатую клавишу, точнее ее код. Мне нужно перевести ее в текст на активном языке если это тест, цифра или символ, и в название клавиши в ином случае (Ctrl, Enter,...). Сделал большой массив со всеми клавишами, но поиск отбирает много процессорного времени, а это плохо хотябы потому, что GetAsyncKeyState не успевает и пропускает некоторые нажатия.
В результате наткнулся на 2 функции: GetKeyNameText и ToAscii
| Цитата | Функция GetKeyNameText
Функция GetKeyNameText извлекает строку, которая представляет название клавиши.
Синтаксис
| Код | int GetKeyNameText( LONG lParam, // второй параметр сообщения клавиатуры LPTSTR lpString, // адрес буфера с именем клавиши int nSize // максимальная длина строки с именем клавиши ); |
Функция ToAscii
Функция ToAscii переводит заданный код виртуальной клавиши и состояние клавиатуры в соответствующий символ или символы Windows. Функция переводит код, используя язык ввода данных и физическую раскладку символов на клавиатуре, идентифицированную данным дескриптором раскладки символов.
Синтаксис
| Код | int ToAscii ( UINT uVirtKey, // код виртуальной клавиши UINT uScanCode, // скэн-код PBYTE lpKeyState, // адрес массива состояния клавиши LPWORD lpChar, // буфер для трансляции клавиши UINT uFlags // флажок активного меню ); |
|
Но пока не совсем разобрался как с ними работать, а именно у них присутствует больше параметров, чем у меня данных. Например lParam - я ведь не сообщение принимаю.
Как с ними работать, посоветуйте пожалуйста. |