Linux:正在取消来自 /dev/input/event 的输入*
Linux: Canceling input from /dev/input/event*
在我一直在开发的程序中,我想独立于 window 我关注的任何内容来读取键盘笔画(因此,无论我专注于 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 或一般 OS。有什么好的方法吗?
警告:未经测试
- 以模式O_RDWR打开字符设备(read/write)
- 获取设备:ioctl(fd, EVIOCGRAB, 1)
- 读取事件
- 如果你想发送事件:
- ungrab 设备 ioctl(fd, EVIOCGRAB, 0)
- 写入事件
在 ungrab 和 write 之间,可能会发生其他事件,这些事件不会被过滤并分派给所有连接的文件句柄。不知道可不可以先写后取消抓取(或者根本不写,检查write
的return值)。
提示: 你也可以修改libevdev.
在我一直在开发的程序中,我想独立于 window 我关注的任何内容来读取键盘笔画(因此,无论我专注于 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 或一般 OS。有什么好的方法吗?
警告:未经测试
- 以模式O_RDWR打开字符设备(read/write)
- 获取设备:ioctl(fd, EVIOCGRAB, 1)
- 读取事件
- 如果你想发送事件:
- ungrab 设备 ioctl(fd, EVIOCGRAB, 0)
- 写入事件
在 ungrab 和 write 之间,可能会发生其他事件,这些事件不会被过滤并分派给所有连接的文件句柄。不知道可不可以先写后取消抓取(或者根本不写,检查write
的return值)。
提示: 你也可以修改libevdev.