在 Linux C++ 上检测 keydown 和 keyup 事件 [重复]

2023-12-02

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

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

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

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


您可以阅读原始设备,我还没有尝试过,但这篇博客文章看起来很有希望: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 中运行)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Linux C++ 上检测 keydown 和 keyup 事件 [重复] 的相关文章

随机推荐

  • 从笛卡尔集中选择特定集的逻辑

    我正在制作一个密码暴力破解工具作为学习练习 并且我希望它可以恢复 所以 我想要的是能够说 这是可能的字符集 如果我计算该集的每个可能组合的笛卡尔集 长度为 n 那么点 x 的集是什么 但是 我想在不计算整个集合的情况下执行此操作 我在网上的
  • sqlite全文搜索中的sql注入

    考虑 sqlite3 fts4 表 c execute CREATE VIRTUAL TABLE docs USING fts4 content 以下内容是否可以避免 txt 包含字符串的 sql 注入 我不确定参数化查询是否安全 因为只有
  • Visual Studio 部署项目可选桌面快捷方式

    您好 我正在尝试获取与 VS2010 部署项目集成的可选桌面快捷方式 我在设置的部分添加了 TargetMachine 文件系统的 用户桌面 的快捷方式 并且在用户界面中设置了一个复选框对话框 如何让 Checkbox1Property 转
  • 在每个jsp页面中包含css和js文件

    我有常见的 css 和 js 文件 它们包含在每个 jsp 文件中 那么将它们包含在每个页面中的最佳实践是什么 我以前用过但我想知道这是否是最好 最干净的继续方式 我喜欢为此使用片段 它们是 JSP 支持的标准 因此不需要其他依赖项 正如您
  • Excel 2010 VBA 单步执行字符串并按顺序将一个字符放入每个单元格中

    很多很多年前 我已经习惯在 C 中进行字符串切片 但我正在尝试使用 VBA 来完成此特定任务 现在我已经创建了一个字符串 这是一个字符串 并创建了一个新的工作簿 我现在需要的是使用字符串切片将 t 放入 A1 h 放入 A2 i 放入 A3
  • AngularDart:路由名称的命名空间也分层?

    考虑以下分层路由的初始化 摘自AngularDart 教程 router root addRoute name add path add enter view view addRecipe html addRoute name recipe
  • 如何在IntelliJ IDEA中设置SDK?

    我没有找到任何在 IntelliJ IDEA 中设置 SDK 的方法 在 ubuntu 16 04 LTS 中找不到为 IntelliJ IDEA 设置 SDK 的任何路径 我正在使用这个 IDE 来处理 mongodb 但由于这个问题无法
  • Delphi 中的库项目是否有条件定义?

    我有一个实用程序单元 其中的代码在一些应用程序和 DLL 之间共享 我想根据当前项目类型有选择地编译本单元的部分内容 应用程序 包或库 我在中找不到库或包的任何条件定义System单位 Google 没有找到任何相关内容 那么 是否有任何条
  • 删除行后释放 postgres 数据库中的存储空间的步骤?

    我超过了 Heroku 上 postgres 数据库的 GB 限制 我找到了一个 非常大的 已弃用的表并运行Plot delete all 现在 17k 行表中有 0 行 我现在可以看到行号有差异 但 GB 没有差异 这是之前的数据大小 3
  • 将 NSPredicate 应用于 [(String, Array)]

    我以这种方式存储数据 var data String Array
  • Javascript 中两个日期初始化的差异

    为什么要做这些两个日期不同 var date1 new Date date1 setFullYear 2012 year four digits date1 setMonth 10 month from 0 11 date1 setDate
  • C++ 回调将文本发送回 C#

    我是 C 新手 我被告知使用 C 的 回调 是最好的解决方案 这是我的情况 我有一个用 C 编写的 DLL这个 DLL 有一个方法来启动通过 C 代码运行的服务 这工作正常 当 DLL 中的服务运行时 我希望 DLL 将文本传递回 C 代码
  • 无法解析:com.google.firebase:firebase-analytics:9.0.0 [重复]

    这个问题在这里已经有答案了 根据Google I O 2016 我知道 Firebase 它对我来说非常好 但我无法使用它 因为这个错误 我得到了一个解决方案 将 Google play services 更新到30 但没有更新尖端 您必须
  • 如何将设备函数中分配的内存复制回主内存

    我有一个包含主机函数和设备函数的 CUDA 程序执行 在主机函数中 我分配了一个全局内存output然后它将被传递给设备函数并用于存储设备函数内分配的全局内存的地址 我想访问主机函数中内核分配的内存 以下是代码 include
  • 循环遍历图像目录并将它们旋转 x 度并保存到目录

    我正在使用 Python Open Numpy 和 Scipy 我有一个图像目录 我想将其旋转一定角度 我想编写这个脚本 我正在用这个 OpenCV Python 将图像围绕特定点旋转 X 度但它似乎并不完全按照我的设想进行 我得到了指定的
  • 多个元素的 jQuery UI 自动完成格式

    我的 jQuery UI 自动完成设置符合我的喜好并且工作完美 但有一个致命的缺陷 在我的自动完成中 我使用自定义显示就像这个例子 我有一些非常相似的东西 但有一个例外 唯一的区别是我在该页面上有多个同一类的自动完成元素 只有第一个元素显示
  • 转换为 Dalvik 格式失败,错误 2 adt 16.0.1

    最近我们将 eclipse adt 插件更新到了 16 版本 现在无法运行我们的应用程序 它可以正常编译 但是当我们运行时 它会抛出以下错误 写入输出时遇到问题 016be7fe 0032 没有扩展操作码 sget object v4 Lo
  • 当你可以用 <<< 和结束分隔符填充字符串时,它被称为什么?

    我知道在 C 和 PHP 中 您可以用硬编码文本填充字符串或文件 如果我没记错的话 它应该是这样的 var lt lt lt DELIMITER Menu for program X 1 Add two numbers 2 Substrac
  • 计算带有空白的唯一值Excel公式

    我正在尝试使用公式计算 Excel 中的唯一值 我尝试使用下面的公式 但它返回 DIV 0 错误 因为我的范围中有空格 无论如何 是否可以使用公式来计算带有空白的范围内的唯一值 任何有关此问题的帮助将不胜感激 SUM 1 COUNTIF U
  • 在 Linux C++ 上检测 keydown 和 keyup 事件 [重复]

    这个问题在这里已经有答案了 可能的重复 访问 C 中的击键 监控 Ubuntu 中的键盘按键 我想检测程序中的每个 keydown 和 keyup 事件并为其添加时间戳 是的 我的意思是keydown and keyup不仅仅是按键 以及按