如何读取键盘上的每个键?

How to read every key on Keyboard?

我们如何读取键盘上每个键的ascii?

我使用 getch() 读取 delete 和其他类似的键..但不读取 FN keysNumlock 或任何作为全局快捷方式的键..

那么我怎样才能在 C 程序中捕获这些键呢?

提到了三种情况:

  1. 删除等,
  2. FN键(功能键)
  3. NumLock(特殊键)

在 Linux 的上下文中,getch 指的是 ncurses 函数。如果你使用 ncurses,那么你可以告诉它解码功能键(发送一系列字符)和 return 那些作为单个数字(恰好太大而不适合 char ).例如

int ch;
keypad(stdscr, TRUE);
ch = getch();

NumLock 是不同的情况,因为它(就像 controlshift 键) 用作 修饰符 并且通常本身不发送任何字符:

  • X Window 环境像这样使用它 — 可以读取底层 scancode directly. X programs (such as xterm), can read the X events which have this information. The source code of xev 在这种情况下是一个很好的起点。
  • 在控制台环境中,可以使用 Linux 特定调用来读取数据。如果您真的需要它,console_ioctl(4) 手册页是一个很好的起点。