如何获取键盘按键值(或数字/代码)

C++ How to get keyboard key press value (or number/code)

本文关键字:数字 代码 键值 键盘 何获取 获取      更新时间:2023-10-16

我想知道用户按了哪个键

我知道有cin()getline(cin, var),但我不想输入,我想获得键的编号(索引,或称为代码?)。

例如,我想知道用户是否按了F1F10或Enter或Escape,然后做一些正确的事情。

例如:

if(user_has_pressed_escape)
{
 exit_the_console();
}

这可以通过操作系统自己的API获得。不同的操作系统有不同的api(例如android根本没有F10键)。

通常你会使用第三方库来包装API,这样你就可以独立于操作系统进行编码。当涉及到第三方库时,有很多选择:SDL, QT, wxWidgets, GTK等等。

这些库隐藏了与特定操作系统API的交互,并允许您编写一次代码并在许多类型的系统上运行。但是要了解它是如何工作的,你可以看看每个操作系统的文档。

例如在Windows上GetKeyboardState或PeekMessage

在Linux X11: XQueryKeymap或通过XPeekEvent

您可以使用ASCII表轻松获取ESC键的事件https://en.wikipedia.org/wiki/ASCII

if (27 == getchar()) // 27 is for ESC
{
    //do something
}

功能键(F1, F2,…)取决于您的操作系统。

根据http://pdcurses.sourceforge.net/doc/PDCurses.txt上的"PDCurses用户指南"的"INPUT VALUES"部分,如果键盘已启用,则可以使用getch功能来检测此类键。

以下是相关的关键代码。

KEY_F0      function keys; space for 64 keys is reserved
KEY_F(n)    (KEY_F0+(n))
KEY_EXIT    Exit key

PDCurses库具有跨平台的优点。

c++作为C的祖先是强系统独立的,所以没有办法只使用语言本身,甚至是STL库来做你想做的事情。您将不得不在不同的平台上使用不同的库。通常,这只与操作系统相关,因为大多数操作系统实际上都在使用中断机制寻找键盘动作,比如按下。所以你的程序必须与操作系统进行强交互。

如果你不太了解这个主题,你应该尽量避免使用键盘本身
相关文章: