bool handleKey(char ch); bool handleExtendedKey(char ch); int main(int, char**) { while (true) { char ch = getch(); // или чем там читается // консольный ввод на этой платформе if (ch != 0 /*или 0xE0, или с чего ещё начинаются последовательности для расширенных клавиш */) { if (!handleKey(ch)) break; } else if (!handleExtendedKey(getch())) break; } return 0; } bool handleKey(char ch) { std::cout << ch; return true; } static const char kUpArrow = 'H'; static const char kDownArrow = 'P'; static const char kLeftArrow = 'K'; static const char kRightArrow = 'M'; static const char kF10 = 'D'; bool handleExtendedKey(char ch) { switch (ch) { case kUpArrow: std::cout << "[Up]"; return true; case kLeftArrow: std::cout << "[Left]"; return true; case kRightArrow: std::cout << "[Right]"; return true; case kDownArrow: std::cout << "[Down]"; return true; case kF10: std::cout << "[F10]"; return false; // exit main loop default: std::cout << "[Unknown key]"; return true; }
int main(int, char**) { std:fstream keynames("keynames.h"); while (true) { unsigned char ch = getch(); if (ch == 'q') return 0; if (ch == 0xE0) { unsigned char ch2 = getch(); std::cout << "Extended key 0xE0 " << std::hex << ch2 << ", enter a name: "; std::string name; std::cin >> name; keynames << "static const unsigned char k" << name << " = 0x" << std::hex << ch2 << ";\n"; } } }