linux下使用xlib模拟鼠标移动和点击【转贴】

    技术2022-05-20  31

    实现里windows下的GetCursorPos和SetCursorPos。记得要init 原帖位置在这里 http://scturtle.is-programmer.com/posts/22534.html /* ref: http://www.ishiboo.com/ ~danny/Projects/xwarppointer/ */ #include <stdio.h> #include <string.h> //头文件 #include <unistd.h> #include <X11/X.h> #include <X11/Xlib.h> #include <X11/Xutil.h> //全局变量 Display *display; Window root; //初始化 void init() {      if ((display = XOpenDisplay(NULL)) == NULL) {          fprintf (stderr, "Cannot open local X-display./n" );          return ;      }      root = DefaultRootWindow(display); } //得到坐标 void GetCursorPos( int &x, int &y) {      int tmp;unsigned int tmp2;      Window fromroot, tmpwin;      XQueryPointer(display, root, &fromroot, &tmpwin, &x, &y, &tmp, &tmp, &tmp2); } //设置坐标 void SetCursorPos( int x, int y) {      int tmp;      XWarpPointer(display, None, root, 0, 0, 0, 0, x, y);      XFlush(display); }   //模拟点击 /* http://www.linuxquestions.org/questions/programming-9/simulating-a-mouse-click-594576/ */ void mouseClick( int button) {      Display *display = XOpenDisplay(NULL);        XEvent event;        if (display == NULL)      {          printf ( "Errore nell'apertura del Display !!!/n" );          return ;      }        memset (&event, 0x00, sizeof (event));        event.type = ButtonPress;      event.xbutton.button = button;      event.xbutton.same_screen = True;        XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);        event.xbutton.subwindow = event.xbutton.window;        while (event.xbutton.subwindow)      {          event.xbutton.window = event.xbutton.subwindow;            XQueryPointer(display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);      }        if (XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) printf ( "Errore nell'invio dell'evento !!!/n" );        XFlush(display);        usleep(100000);        event.type = ButtonRelease;      event.xbutton.state = 0x100;        if (XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) printf ( "Errore nell'invio dell'evento !!!/n" );        XFlush(display);        XCloseDisplay(display); } int main() {      init();      int x,y;      GetCursorPos(x,y);      printf ( "%d %d/n" ,x,y);      SetCursorPos(0,0);      XCloseDisplay(display);      mouseClick(Button1);      return 0; }

    最新回复(0)