linux - Uinput - 鼠标事件不工作

标签 linux mouse uinput

我在通过 uinput 设备事件文件模拟鼠标事件时发现了一个问题。

我可以用 'struct input_event' 结构格式为键盘/鼠标事件编写事件,但只有键事件工作正常,鼠标事件不工作

我启用了 uinput 所需的所有位

UI_SET_EVBIT - EV_KEY (keyboard/mouse), EV_REP (Repeating events), EV_SYN (Sync report events), EV_REL (Mouse)

UI_SET_RELBIT - REL_X, REL_Y (Mouse)

UI_SET_KEYBIT - All the keys in keyboard, BTN_MOUSE, BTN_LEFT, BTN_RIGHT, BTN_MIDDLE

我用下面的代码触发了事件

gettimeofday(&ev.time,0);
ev.type = EV_KEY;
ev.code = BTN_LEFT;
ev.value = <MOUSE PRESS/RELEASE>; // tbhis wil lbe either 0 or 1
if(write(uinputfd, &ev, sizeof(ev)) < 0)
{
    return false;
}

// Then send the X
gettimeofday(&ev.time,0);
ev.type = EV_REL;
ev.code = REL_X;
ev.value = x;
if(write(uinputfd, &ev, sizeof(ev)) < 0)
{
    return false;
}

// Then send the Y
gettimeofday(&ev.time,0);
ev.type = EV_REL;
ev.code = REL_Y;
ev.value = y;
if(write(uinputfd, &ev, sizeof(ev)) < 0)
{
    return false;
}

// Finally send the SYN
gettimeofday(&ev.time,0);
ev.type = EV_SYN;
ev.code = SYN_REPORT;
ev.value = 0;
if(write(uinputfd, &ev, sizeof(ev)) < 0)
{
    return false;
}

另外,我可以从相应的 uinput 设备输入文件中读取/打印键盘/鼠标事件。

有人知道为什么只有鼠标事件不起作用吗?

最佳答案

我不知道为什么,但我注意到我必须将绝对键和相对键分开到不同的设备中。我希望其他人知道如何将它们组合到一个设备中。

Edit1:按键和相关事件可以在同一台设备上。如果您仍需要这方面的帮助,我建议您发布用于设置 struct uinput_user_dev 的代码,并编写 SET_EVBITSET_RELBIT .事件发送看起来没问题,估计是初始化,或者关闭。

关于linux - Uinput - 鼠标事件不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29692152/

相关文章:

java - JSlider 未从鼠标事件正确更新

c - 鼠标指针在输入子系统中移动后无法模拟 Click 事件

c# - C#鼠标钩

python 串口代码在 windows 中工作,但在 linux 中不工作

linux - 使用 ffmpeg 将音频与图像和视频连接起来

linux - 连接文件并创建索引

c# - Winform - 确定鼠标是否离开用户控制

python - 无法在树莓派上安装uinput

python - 在 Ubuntu 上通过 pyODBC 连接到 Microsoft SQL Server