gpt4 book ai didi

c - 虚拟鼠标和 eventX

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:49:31 27 4
gpt4 key购买 nike

我正在通过创建虚拟键盘/鼠标来玩 uinput。我设置虚拟设备没问题。

int                    fd;
struct uinput_user_dev uidev;
struct input_event ev;
int dx, dy;
int i;

fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
if(fd < 0)
die("error: open");


if(ioctl(fd, UI_SET_EVBIT, EV_KEY) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_KEYBIT, BTN_LEFT) < 0)
die("error: ioctl");

if(ioctl(fd, UI_SET_EVBIT, EV_REL) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_RELBIT, REL_X) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_RELBIT, REL_Y) < 0)
die("error: ioctl");

memset(&uidev, 0, sizeof(uidev));
snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "test");
uidev.id.bustype = BUS_USB;
uidev.id.vendor = 0x1;
uidev.id.product = 0x1;
uidev.id.version = 1;

write(fd, &uidev, sizeof(uidev))
ioctl(fd, UI_DEV_CREATE)

而且我可以在/dev/uinput 中写入事件。它工作正常,鼠标在移动或键盘在工作。

但是我不知道在哪里可以读取输入的事件。我可以在/dev/input/mice 上读取鼠标并查看虚拟鼠标的数据。但是/dev/input/mice 适用于所有鼠标...

我应该阅读哪个/dev/input/eventX?我试图阅读所有这些内容,但什么也没有。

我为我的 usb 鼠标读取了 event0,为键盘读取了 event1...但是我在哪里可以读取有关我的虚拟设备的信息?

最佳答案

通常使用标准的 udev 规则根据名称生成符号链接(symbolic link);例如,在基于 Debian 的系统中,作为 /dev/input/by-id/*-event-* 到相应的输入事件设备。因为这些是基于设备属性的,所以它们是稳定的:您可以只使用其中的符号链接(symbolic link)来访问您的虚拟设备。

如果找不到符号链接(symbolic link),可以搜索输入事件设备。

每个 Linux 输入事件设备都由伪目录 /sys/class/input/event* 描述,即 /sys/class/input/event0,对应于 /dev/input/event0/dev/input/event/0(以存在者为准)。

伪文件 /sys/class/input/event*/device/name 包含设备名称。产品、供应商、版本和总线类型在伪文件 /sys/class/input/event*/device/id/product/sys/class 中以四字符的十六进制字符串形式提供/input/event*/device/id/vendor/sys/class/input/event*/device/id/version/sys/class/input/event*/device/id/bustype,分别。您可以正常读取这些文件,除非您使用 stat()fstat() 它们,它们的大小为零。相反,将这些文件的内容读取到一个小缓冲区(长度为 128,或最多 126 个字符 + "\n\0",应该足以作为名称;8 (4 + "\n\0") 应满足id/)下的文件,并与所需的设备名称进行比较,或解析十六进制数。

关于c - 虚拟鼠标和 eventX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33275495/

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