Есть ли безопасный способ обнаружить расширенные клавиши на консоли Windows?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Есть ли безопасный способ обнаружить расширенные клавиши на консоли Windows?

Сообщение Anonymous »

Я создаю библиотеку для упрощения ввода и вывода через консоль (по сути, это своего рода движок, который я мог бы использовать для чего-то вроде VIM). Поэтому я использую _getch() для посимвольного ввода в Windows.
Однако у меня возникают проблемы, когда дело доходит до так называемых «расширенных клавиш» — просто как и в Linux с 0x1B (ESC), Windows также определяет многобайтовые входные значения. В Linux я использую select для чтения всех последовательных символов подряд. Но версия Windows select реализована не полностью и не имеет для этого возможности.
В Windows эти «расширенные ключи» начинаются либо с 0x00, либо с 0xE0. . В то время как 0x00 не является проблемой, 0xE0 - это так, потому что для традиционных кодовых страниц 0xE0 обычно является собственным символом (Windows-1252 определяет его как à), и даже для UTF-8, 0xE0 может быть допустимым первым байтом символа (например, всеми любимый символ Юникода ඞ — он закодирован как 0xE0 0xB6 0x9E). И использование UTF-16 _getwch() тоже не помогает, так как 0x00E0= также является допустимым значением Unicode.
Я уже пробовал _kbhit(), он также возвращает ненулевое значение, когда я нажимаю несколько клавиш «одновременно», в отличие от select в Linux с тайм-аутом 0.
Итак, мой вопрос: есть ли способ определить, принадлежит ли следующий символ тому же вводу или нет?< /p>
По сути, мне нужен следующий пример кода:

Код: Выделить всё

#include 

int main()
{
bool bExit = false;

while (!bExit)
{
std::string sInput = (char)_getch();

while (NextKeyBelongsToSameInput()) // 

Подробнее здесь: [url]https://stackoverflow.com/questions/79134658/is-there-a-safe-way-to-detect-extended-keys-on-the-windows-console[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»