3

我已经参考了很多关于如何通过将这些事件映射到您自己的真实鼠标来控制鼠标光标移动和点击的教程,但我注意到每次我必须将此鼠标关联到 /dev/input/ 中的一个指定事件,如果我没有连接一只真正的鼠标,或者如果linux没有在这个真正的鼠标上给出正确的事件编号,程序肯定会失败。

现在我需要写一个通用的程序,可以在linux上制作一个完整的虚拟鼠标,也就是说,这个程序可以应用到任何机器上,即使机器实际上没有鼠标,但只要光标会反应我给他们距离、鼠标光标移动的方向、点击所需的时间以及点击持续的时间。

所以我只是想知道是否有任何不需要我必须映射到的真实鼠标设备的通用界面,我试图访问 /dev/input/mice 事件,但似乎我只能获取光标的位置和单击信息为只要它移动或点击,谁能告诉我一个更通用的界面?提前谢谢你!!!

4

2 回答 2

3

您可以使用 XTest 功能。这个 X11 扩展包括模拟按键、鼠标按钮按下和鼠标移动的功能。

您可以在此处阅读手册页:http: //linux.die.net/man/3/xtestfakekeyevent

这个简短的 C 示例,当与-lX11and链接时-lXtst,应该将鼠标移动到屏幕的左上角并单击鼠标左键:

#include <X11/Xlib.h>
#include <X11/extensions/XTest.h>

void move_mouse(Display* display, int x, int y){
    XTestFakeRelativeMotionEvent(display, x, y, 0);
    XFlush(display);
}
void set_mouse(Display* display, int x, int y){
    XTestFakeMotionEvent(display, 0, x, y, 0);
    XFlush(display);
}
void button_make(Display* display, unsigned int button){
    XTestFakeButtonEvent(display, button, True, 0);
    XFlush(display);
}
void button_break(Display* display, unsigned int button){
    XTestFakeButtonEvent(display, button, False, 0);
    XFlush(display);
}
int main(int argc, char **argv){
    Display *display = XOpenDisplay(NULL);
    set_mouse(display, 0, 0);
    button_make(display, 1);
    button_break(display, 1);
    return 0;
}
于 2013-01-20T23:43:16.120 回答
0

请参阅此相关问题

假设 X11 桌面环境,您可以使用XSendEvent; 然而,接收应用程序可以区分此类“假”事件。

于 2013-01-20T20:01:42.580 回答