2

可能重复:
访问 C 中的击键
监视 Ubuntu 中的键盘键

我想检测程序中的每个 keydown 和 keyup 事件并为其加上时间戳(是的,我的意思是keydownkeyup而不仅仅是 keypress)以及按下了什么键。我可以通过使用诸如 GTK 之类的 APi 来做到这一点,但我希望尽可能简单和低级,以避免库的开销影响时间以及编写更少的代码。

我已经在谷歌上搜索了一段时间,到目前为止已经找到了大量关于如何在 Windows 上执行此操作的内容,这对我没有帮助,因为我使用的是 Linux 系统,以及如何检测 Linux 上的按键,但是不是keyup keydown。

谁能告诉我需要使用什么系统调用、库等,以便使用 C++ 中的命令行程序在 Linux 系统上捕获 keydown 和 keyup 事件?如果您有教程或代码示例的链接,将不胜感激。

4

3 回答 3

3

您可以阅读原始设备,我没有尝试过,但这篇博文看起来很有希望: https ://web.archive.org/web/20180108194231/http://www.thelinuxdaily.com/2010/05/grab- raw-keyboard-input-from-event-device-node-devinputevent/(是http://www.thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from-event-device-node-devinputevent/但那个网站下线了)

所以本质上你是直接从 /dev/input/*

您可以通过运行sudo cat /dev/input/eventX其中 X 是该目录中列出的事件设备之一(其中一个将是您的键盘。我确信有一种以编程方式查找哪个事件设备的好方法,但您可以快速找出通过查看 /dev/input/by-id/ 或直接从其中一个符号链接中读取。)


注意:这将让您一直使用键盘输入,而不仅仅是在您的窗口处于焦点时..(您的程序甚至不需要在 xterm 中运行,甚至不需要在 pty 中运行)。

于 2012-10-22T19:28:25.617 回答
2

实际上,如果没有库,您将无法做到这一点。如果您想要一些开销很小的东西,我建议您使用ncurses。如果您绝对必须在没有库的情况下执行此操作,请查看 ncurses 如何实现它。当然,它会非常复杂。

于 2012-10-22T19:25:42.787 回答
0

我会考虑看看 OIS(面向对象的输入系统)库。它非常易于使用,具有良好的 OO 设计并且是跨平台的。有关教程和一些代码,请查看http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Using+OIS

于 2012-10-22T20:13:03.533 回答