Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват русских букв под win32-консолью, ... и функция getch() 
:(
    Опции темы
BreakPointMAN
  Дата 15.9.2004, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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() (аналогичные - т.е. ожидающие нажатия клавиши и возвращающие код символа без эха на экран), которые делали бы то же самое, но корректно? Вообще-то, можно, конечно, пропускать нулевой символ и анализировать следующий за ним, но буквы 'х', 'ъ', 'ж', 'э', 'б' и 'ю' мы все равно в таком случае не поймаем...


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Конструктор
Дата 16.9.2004, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 12.5.2004
Где: Москва

Репутация: нет
Всего: 10



Попробуй попользовать _getwch() возвращающий символ в юникоде. (Правда это в VC в Borland наверное будет просто getwch().

Еще есть win32 функция - ReadConsole или ReadConsoleInput.
Добавлено @ 10:52
Во нашел, еще можно попробовать изменить кодовую страницу консоли функцией SetConsoleCP(код страницы).
PM MAIL WWW ICQ   Вверх
BreakPointMAN
Дата 18.9.2004, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Цитата
Попробуй попользовать _getwch() возвращающий символ в юникоде. (Правда это в VC в Borland наверное будет просто getwch().

Еще есть win32 функция - ReadConsole или ReadConsoleInput.
Добавлено @ 10:52
Во нашел, еще можно попробовать изменить кодовую страницу консоли функцией SetConsoleCP(код страницы).

Другие функции самого языка не подходят - символ нужно чтобы вводился без эха на экран... и не через поток... гмм... WinAPI-шную функцию попробую заюзать....


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.