gpt4 book ai didi

c - 如何在 C 中使用 libevdev 生成键盘输入

转载 作者:太空狗 更新时间:2023-10-29 12:32:20 30 4
gpt4 key购买 nike

我想编写一个应用程序来为 Linux 系统生成键盘输入(即对于系统来说,它看起来就像按下键盘上的按钮)。我想使用 C,但 xdotools 不是一个选项。 Libevdev 看起来很有前途,但到目前为止我还没能让它发挥作用。

首先,可以libevdev做我想做的事?大多数文档都侧重于读取传入的输入并将其输出,但 API 确实具有“通过 uinput 设备发布事件”的功能。

还有一个创 build 备的例子。我修改了示例如下:

#include <stdio.h>
#include <libevdev.h>
#include <libevdev-uinput.h>

int main(int argc, char **argv)
{
int err;
struct libevdev *dev;
struct libevdev_uinput *uidev;

dev = libevdev_new();
libevdev_set_name(dev, "fake keyboard device");

libevdev_enable_event_type(dev, EV_KEY);
libevdev_enable_event_code(dev, EV_KEY, KEY_A, NULL);

err = libevdev_uinput_create_from_device(dev,
LIBEVDEV_UINPUT_OPEN_MANAGED,
&uidev);

if (err != 0)
return err;

libevdev_uinput_write_event(uidev, EV_KEY, KEY_A, 1);
libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);
libevdev_uinput_write_event(uidev, EV_KEY, KEY_A, 0);
libevdev_uinput_write_event(uidev, EV_SYN, SYN_REPORT, 0);

libevdev_uinput_destroy(uidev);
printf("Complete\n");
}

当我运行这个应用程序时,我没有看到任何错误(为简洁起见,错误处理已从上面的代码中删除),但我也没有看到“A”键被按下。是我做错了什么,还是我对这个库有错误的期望?

最佳答案

你的代码本身没有问题,它看起来像是一个时间问题。例如,如果您从 X 中运行它,当 X 服务器收到 udev 事件时,告诉 evdev 驱动程序打开设备等,设备又消失了。您应该会在 Xorg.log 中看到一条消息。

如果您检查 libevdev 的源代码,您会发现它实际上只是对写入/dev/uinput 的一个小包装。它所提供的只是更好的类型安全性和稍微简单的代码。

延迟是最简单的解决方案,更复杂的解决方案是检查 X 是否正确初始化了设备,或者至少使用 udev 检查设备是否出现。

关于c - 如何在 C 中使用 libevdev 生成键盘输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23092855/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com