linux上有没有通用的接口来模拟鼠标的移动和点击?

Dan*_*ong 5 linux mouse device

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

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

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

小智 5

您可以使用 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;
}
Run Code Online (Sandbox Code Playgroud)


Bas*_*tch 1

请参阅此相关问题

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