如何读取键盘上的每个键?
How to read every key on Keyboard?
我们如何读取键盘上每个键的ascii?
我使用 getch()
读取 delete
和其他类似的键..但不读取 FN keys
或 Numlock
或任何作为全局快捷方式的键..
那么我怎样才能在 C 程序中捕获这些键呢?
提到了三种情况:
- 删除等,
- FN键(功能键)
- NumLock(特殊键)
在 Linux 的上下文中,getch
指的是 ncurses 函数。如果你使用 ncurses,那么你可以告诉它解码功能键(发送一系列字符)和 return 那些作为单个数字(恰好太大而不适合 char
).例如
int ch;
keypad(stdscr, TRUE);
ch = getch();
NumLock 是不同的情况,因为它(就像 control 和 shift 键) 用作 修饰符 并且通常本身不发送任何字符:
- 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) 手册页是一个很好的起点。
我们如何读取键盘上每个键的ascii?
我使用 getch()
读取 delete
和其他类似的键..但不读取 FN keys
或 Numlock
或任何作为全局快捷方式的键..
那么我怎样才能在 C 程序中捕获这些键呢?
提到了三种情况:
- 删除等,
- FN键(功能键)
- NumLock(特殊键)
在 Linux 的上下文中,getch
指的是 ncurses 函数。如果你使用 ncurses,那么你可以告诉它解码功能键(发送一系列字符)和 return 那些作为单个数字(恰好太大而不适合 char
).例如
int ch;
keypad(stdscr, TRUE);
ch = getch();
NumLock 是不同的情况,因为它(就像 control 和 shift 键) 用作 修饰符 并且通常本身不发送任何字符:
- X Window 环境像这样使用它 — 它 可以读取底层 scancode directly. X programs (such as
xterm
), can read the X events which have this information. The source code ofxev
在这种情况下是一个很好的起点。 - 在控制台环境中,可以使用 Linux 特定调用来读取数据。如果您真的需要它,console_ioctl(4) 手册页是一个很好的起点。