Однако у меня возникают проблемы, когда дело доходит до так называемых «расширенных клавиш» — просто как и в 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=
Код: Выделить всё
U+00E0Я уже пробовал _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]
Мобильная версия