对于我的应用程序的Windows版本,我正在使用WM_INPUT并直接注册鼠标设备以获得最精确的移动。我将如何在X11中执行此操作?
答案 0 :(得分:2)
有几种方法可以执行此操作,具体取决于您使用的框架。
如果您打算使用“Xlib”(最基本的X11编程方式)来执行此操作,您应该查看Xlib manual,特别注意XInput。 可以使用XI2(XInput版本2)
检索更详细的信息其他更高级别的框架可以使事情变得更容易。看看Qt。它是我见过的最好的GUI API之一。
告诉我们您是否需要更多。
答案 1 :(得分:1)
这里有11个链接,提供参考,建议和两种不同的方法来获取Linux上的原始鼠标移动。 Link #2 (Python)显示了阅读鼠标设备的传统方式,#1 (C),#3 (Python)和#4 (C)显示了事件的方式。 ps / 2协议包含在link #5中。 Link #6是一个命令行示例。
这两种方法中的每一种都通过从设备驱动程序文件获取x和y方向上的增量流来绕过X(Xlib)。 Xlib传统上只提供窗口(或屏幕)位置,而不是增量,因此如果您想继续获取特定方向的读数,则必须继续将指针从窗口边缘移开。 [请参阅link #8以快速讨论许多程序使用X的“warping to center”黑客攻击。然而,新的XInput 2.0扩展(link #10)提供了一个用于获取增量的X API (您可能必须至少链接-lX11和-lXi)。
两种设备方法中的任何一种的本质是:
1:打开以读取类似“/ dev / input / mouse0”设备或类似内容(取决于您的发行版命名以及您要使用的方法,/ dev / input / event4用于其他方法)。
2:从中读取。每隔这么多字节代表鼠标移动。例如,对于ps / 2原始协议方法,例如,通过打开上面的鼠标[n],如果你只关心x,y移动,你基本上只需要每3字节序列的第2和第3个字节。第二个字节代表X.第三个字节代表Y.两个字节中的每一个都是一个int8_t(有符号8位)数量。正X似乎是正确的,没有问题;然而,正Y似乎是向上的(如在大多数数学教科书中),而在屏幕上,正Y通常被认为是从屏幕的左上角向下移动(而不是从左下角向上作为典型的原点)笛卡尔坐标系)。
其他说明:如果您正在运行X,则可能需要使用open / read而不是fopen / getc(请参阅link #7和其他链接中的代码)。如果您想要前3个按钮的鼠标按钮状态或想要确认x或y的签名,那么也要查看第一个字节。 [我怀疑溢出是普通“流”使用中的一个问题,但那些位也是如此。]你可能会注意到你是否在Linux命令行上进行实验,例如,快速“猫”到“更少”,大多数动作只是1个单位(很多^ A ^ @和< FF>)。这可能取决于鼠标的配置方式以及鼠标的功能。 Link #5涵盖了简单的协议,甚至涵盖了按钮4和5以及鼠标滚轮的Microsoft intellimouse标准扩展。 Link #11涵盖了ps / 2鼠标或键盘的控制器芯片/逻辑配置。它解释了如何通过此接口配置鼠标。有一个工具(link #9, xdotool)模拟鼠标点击以帮助自动化窗口任务。最后,您可能需要root才能直接从这些设备读取(取决于您的发行版)。