Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用鼠标进行非鼠标输入_C++_Linux_Mouse_Usb - Fatal编程技术网

C++ 使用鼠标进行非鼠标输入

C++ 使用鼠标进行非鼠标输入,c++,linux,mouse,usb,C++,Linux,Mouse,Usb,因此,我今天的问题是如何与插入linux机器的USB鼠标接口。然而,我不希望鼠标对X环境有任何传统的影响——我只希望能够通过原始输入利用嵌入其中的编码器。这是我的问题 如何从Linux中C++中的备用鼠标设备获得低级但有意义的数据?具体地说,我想知道x轴和y轴上的相对位置或至少编码器计数 您应该使用HID(人机界面设备)协议 我已经为一个USB条形码阅读器做了类似的事情,它显示为一个HID键盘 在最近的内核中,将在/dev/input/event*中为鼠标提供一个事件设备。如果您打开它并使用E

因此,我今天的问题是如何与插入linux机器的USB鼠标接口。然而,我不希望鼠标对X环境有任何传统的影响——我只希望能够通过原始输入利用嵌入其中的编码器。这是我的问题

如何从Linux中C++中的备用鼠标设备获得低级但有意义的数据?具体地说,我想知道x轴和y轴上的相对位置或至少编码器计数

您应该使用HID(人机界面设备)协议


我已经为一个USB条形码阅读器做了类似的事情,它显示为一个HID键盘

在最近的内核中,将在
/dev/input/event*
中为鼠标提供一个事件设备。如果您打开它并使用EVIOCGRAB ioctl()抓取它,它将不会向任何其他应用程序发送鼠标事件。然后,您可以直接用鼠标读取事件-请参阅linux源代码发行版中
documentation/input/input.txt
中的evdev接口文档

当您从事件设备读取时,您将获得以下形式的完整数量的输入事件:

struct input_event {
    struct timeval time;
    unsigned short type;
    unsigned short code;
    unsigned int value;
};
struct input\u event
和以下宏都是在
linux/input.h
中定义的)

您感兴趣的事件将具有
input\u event.type==EV\u REL
(相对运动事件),
input\u event.code
成员类似于
REL\u X
(指示X轴-有关完整列表,请参阅
linux/input.h
文件),而
input\u event.value
将是位移


正如另一个答案所建议的那样,没有必要自己实现HID协议。

您不希望“对X环境产生任何传统影响”,但您确实想要X轴和y轴?坐标是否仅在X环境中具有意义/可用性?我不知道?是吗?如果原始数据不是相对x-y差分,它是如何编码的?这对需要独立跟踪的多个USB鼠标有效吗?@Gerhman:是的,每个鼠标都有自己的
/dev/input/event*
设备。