如何检测在 C 中使用诅咒按下的箭头键?

Posted

技术标签:

【中文标题】如何检测在 C 中使用诅咒按下的箭头键?【英文标题】:How do I detect arrow keys pressed using curses in C? 【发布时间】:2010-11-14 00:53:19 【问题描述】:

在尝试通过 curses (ncurses) 从箭头键获取输入时,它不会捕获为 KEY_UP 等。我使用了带有 true 参数的键盘功能,但 getch 仍然返回了转义序列。如何切换 getch() 返回的值并专门抓取箭头键?

【问题讨论】:

【参考方案1】:

我将getch() 调用存储为char,而它们应该是int。切换后完美运行。

【讨论】:

【参考方案2】:

我在 Mac OS X 上发现了同样的问题。但通过添加以下内容已解决:

keypad(stdscr, TRUE);

【讨论】:

这对我有用。【参考方案3】:

当按下箭头键时,标准(VT100 类)终端会发送一系列字符。您只需要跟踪这些是否按顺序按下。以下是要注意的字符:

Down Arrow  0x1B 0x5B 0x42
Left Arrow  0x1B 0x5B 0x44
Right Arrow 0x1B 0x5B 0x43
Up Arrow    0x1B 0x5B 0x41

【讨论】:

您是否可以使用 ctrl 作为组合键或序列输入转义码? 不需要;您可以直接键入它们。 0x1B = esc, 0x5B = [, and 0x41 - 0x44 = A - D。在终端中输入 esc[D,光标向左移动。 这种方法一开始就完全违背了使用 curses 库的全部目的:-)

以上是关于如何检测在 C 中使用诅咒按下的箭头键?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用箭头键在诅咒中移动光标 (C)

检测 JavaScript 中的箭头键按下

如何检查是不是已在 Ruby 和 Windows 控制台中按下箭头键

如何使用 Linux 系统调用检测何时按下某个键

用户按箭头键时检测C ++

如何检测 C++ 中的组合键输入?