在Linux C ++上检测keydown和keyup事件

时间:2012-10-22 19:13:07

标签: c++ linux events keydown keyup

  

可能重复:
  Access Keystrokes in C
  Monitoring Keyboard keys in Ubuntu

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

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

任何人都可以告诉我,为了使用C ++中的命令行程序捕获Linux系统上的keydown和keyup事件,我需要使用什么样的系统调用,库等?如果您有教程或代码示例的链接,那将非常感激。

3 个答案:

答案 0 :(得分:3)

你可以阅读原始设备,我没有尝试过这个但是这篇博文看起来很有希望: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 for that matter)。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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