Xlib鼠标移动和点击

#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);
}
 
//模拟点击
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值