【问题标题】:Is there any general interfaces on linux to simulate mouse movements and click?linux上有没有通用的接口来模拟鼠标移动和点击?
【发布时间】:2013-01-03 21:44:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: linux mouse device


    【解决方案1】:

    您可以使用 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;
    }
    

    【讨论】:

    • 知道如何在无需使用外部库/工具的情况下执行此类任务吗?
    • @Jewenile 我认为您至少被 X 库所困。 XTest 是安装在我遇到的大多数 X 服务器上的扩展。对于更简单的命令行界面,您还可以查看xdotool,但它仍然是您必须安装的工具。
    【解决方案2】:

    看到这个related question

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多