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

实现里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);
}
 
//模拟点击
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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值