C语言 Linux:取消/dev/input/event*的输入



在我一直在开发的程序中,我想独立于我关注的任何窗口读取键盘敲击(因此,无论我专注于Firefox还是我正在玩Minecraft,相同的程序都可以工作,而无需改变焦点)。到目前为止,使用linux/input.h库并从/dev/input/event5读取似乎工作得很好。

fd = open(argv[1], O_RDONLY);
struct input_event ev;
int len = read(fd, &ev, sizeof(struct input_event));

然而,我想添加的一个功能是在程序运行时取消此输入,防止我的击键到达Firefox或Minecraft或一般操作系统。有什么好办法吗?

警告:未测试

  • 以O_RDWR(读/写)模式打开字符设备
  • 抓取设备:ioctl(fd, evocgrab, 1)
  • 读取事件
  • 如果你想调度事件:
    • ungrab device ioctl(fd, evocgrab, 0)
    • <
    • 写事件/gh>

在ungrab和write之间,可能会发生其他事件,这些事件不会被过滤并分派给所有连接的文件句柄。我不知道是否可以先写然后再取消抓取(或者甚至根本不写,检查write的返回值)。

提示:也可以修改libevdev.

最新更新