【问题标题】:C++ How to get keyboard key press value (or number/code) [duplicate]C ++如何获取键盘按键值(或数字/代码)[重复]
【发布时间】:2014-07-02 13:12:04
【问题描述】:

我想看看用户按下了哪个键。

我知道有cin()getline(cin, var),但我不想输入,我想获取键的编号(索引或调用它的代码?)。

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

例如:

if(user_has_pressed_escape)
{
 exit_the_console();
}

【问题讨论】:

  • 如果您对非便携式解决方案持开放态度_getch可能可以满足您的需求。

标签: c++


【解决方案1】:

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

您通常会使用第三方库来封装 API,这样您就可以独立于操作系统进行编码。第三方库有很多选择:SDLQTwxWidgetsGTK 等等......

这些库对您隐藏与特定操作系统 API 的交互,让您编写一次代码并在多种类型的系统上运行。但要了解它的工作原理,您可以查看每个操作系统文档。

例如在 Windows 上 GetKeyboardStatePeekMessage

在 Linux X11 上:XQueryKeymap 或通过 XPeekEvent

【讨论】:

  • 你的意思是 C++ 没有为此目的的内置库?
  • 没有。没有 ISO C++ 库可以完成此任务。不过,每个操作系统都有办法做到这一点。 Windows 有 RAW I/O。 Linux(可能还有 OS X)在 /dev 中有一个文件。我只能猜测其他操作系统。当然,我假设您想要扫描代码。不过,这同样适用于在按下键时获取。
  • 如果您想要可移植的代码,您需要将业务逻辑与用户界面分开
【解决方案2】:

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

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

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

【讨论】:

  • 我认为 PDCurses 可以做到这一点。
【解决方案3】:

根据http://pdcurses.sourceforge.net/doc/PDCurses.txt 的“PDCurses 用户指南”的“输入值”部分,如果启用了键盘,则可以使用 getch 功能检测此类键。

这里是相关的关键代码。

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

PDCurses 库具有跨平台的优势。

【讨论】:

    【解决方案4】:

    作为 C 祖先的 C++ 与系统具有很强的独立性,因此无法仅使用语言本身甚至 STL 库来做您想做的事情。您将不得不在不同平台上使用不同的库。通常这将仅取决于操作系统,因为大多数操作系统实际上是在使用中断机制寻找键盘操作,例如按下。所以你的程序将不得不与操作系统进行强烈的交互。

    如果您对此主题了解不多,应尽量避免使用键盘本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-18
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 2013-03-23
      相关资源
      最近更新 更多