![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Имеем: консольное Win32-приложение, написанное в Borland C++ 5.02.
Необходимо: отлавливать нажатия клавиш на клавиатуре в русской раскладке. Проблема: при использовании функции getch() все нормально, если вводятся цифры, знаки препинания и строчные/прописные буквы латиницы - в этом случае getch() возвращает целочисленное значение ASCII-кода соответствующего символа. Но все меняется, когда мы переключаемся в режим ввода кириллицы - цифры и спец. символы вводятся по-прежнему нормально, а вот если нажимается какая-нибудь русская буква, то: 1) она генерирует два байта, причем первый байт - нулевой ('\0'), а второй равен ASCII-коду соответствующей русской буквы; 2) и даже это соблюдается не для всех клавиш: таким образом, например, не ловятся буквы 'х', 'ъ', 'ж', 'э', 'б' и 'ю' - вместо них возвращаются ASCII-коды символов "[];',." ... ........при компиляции того же самого под TC3 все проходит чисто и гладко... На ум уже всякое лезет - и UNICODE, и то, что getch() все-таки больше DOS-овская функция, а не форточная... тестилось под платформами Win98 SE и Win2000 SP4. Результат одинаковый. Вопрос: можно ли как-то обойти поставленную проблему? Т.е. существуют ли другие функции, аналогичные getch() (аналогичные - т.е. ожидающие нажатия клавиши и возвращающие код символа без эха на экран), которые делали бы то же самое, но корректно? Вообще-то, можно, конечно, пропускать нулевой символ и анализировать следующий за ним, но буквы 'х', 'ъ', 'ж', 'э', 'б' и 'ю' мы все равно в таком случае не поймаем... -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| Конструктор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 641 Регистрация: 12.5.2004 Где: Москва Репутация: нет Всего: 10 |
Попробуй попользовать _getwch() возвращающий символ в юникоде. (Правда это в VC в Borland наверное будет просто getwch().
Еще есть win32 функция - ReadConsole или ReadConsoleInput. Добавлено @ 10:52 Во нашел, еще можно попробовать изменить кодовую страницу консоли функцией SetConsoleCP(код страницы). |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Другие функции самого языка не подходят - символ нужно чтобы вводился без эха на экран... и не через поток... гмм... WinAPI-шную функцию попробую заюзать.... -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |