【问题标题】:Is it possible to have a C code deployed that passes through and overwrites keystrokes from the keyboard?是否可以部署一个通过并覆盖键盘击键的 C 代码?
【发布时间】:2021-04-09 00:08:30
【问题描述】:

我使用一些“用户友好”的程序,有时需要我输入长序列的快捷方式和其他字符。我找到了一些像 cnee 这样的工具,但没有任何东西可以帮助我不费时间和精力地自动化这些序列。我只是将源代码添加到其中一个程序 (Qt) 中,但另一个程序有很多依赖项,因此构建它需要时间。

由于对 Linux 开发也很感兴趣,我想出了编写修改版的键盘驱动程序的想法,该驱动程序允许使用单个专用键来定义和调用宏。除了自动化我的击键可能会或可能不会成为一个大的商业模式之外,这对于 Linux 驱动程序编程来说也是一个很好的自学项目。

在 Linux 下实现简单的键盘驱动程序有多难,这样 Gnome 等 GUI 环境才能理解它?可以重建内核或在root权限下使用一些命令在需要时加载此驱动程序。

或者,它可以是驱动器上方某处的钩子,但通常越低越好。

【问题讨论】:

  • 这应该可以通过生成虚假的 KeyPress 和 KeyRelease 事件并将它们发送到当前活动窗口 (GetInputFocus()) 来实现。
  • Qt 框架从来都不是 Linux 键盘驱动程序。通过更改源代码中的快捷方式并重新构建它们,我已经适应了一些 Qt 应用程序的需求,但并非所有应用程序都足够容易从源代码构建。

标签: c++ linux keyboard x11


【解决方案1】:

您不需要编写整个驱动程序。 您只需要 C、uinput 和一些时间来开发。 该怎么办: 0. 找到你的键盘设备节点。您可以使用 evtest 或动态检测它。如果您知道键盘的事件设备节点路径(如 /dev/input/event5),则可以跳过它。

  1. open 键盘路径。
  2. 抓取设备以防止泄漏到 Xorg/Wayland 合成器
  3. 创建具有相同规格的uinput 设备。
  4. 使用poll 获取键盘的原始输入和挂钩键事件。

【讨论】:

    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 2012-09-15
    相关资源
    最近更新 更多