在linux上是否有任何通用接口来模拟鼠标移动和点击?

时间:2013-01-20 19:36:04

标签: linux mouse device

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

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用XTest功能。 这款X11扩展包括假按键,鼠标按键和鼠标移动功能。

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

这个简短的C示例与-lX11-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;
}

答案 1 :(得分:0)

请参阅此related question

假设X11桌面环境,您可以使用XSendEvent;但是,接收申请可以区分这种“虚假”事件。