本文开发环境配置:

依赖的库/文件 deb系 rpm系
gdk-2.0 apt install libgtk2.0-dev yum install gtk2-devel
gdk-3.0 apt install libgtk-3-dev yum install gtk3-devel
x11/Xlib.h apt install libx11-dev yum install libX11-devel
X11/extensions/XTest.h apt install libxtst-dev yum install libXtst-devel
  • 本文中使用的gdk代码在编译时如果提示’undefined reference’,则表示您的系统中gtk2 / gtk3的版本已经将该API丢弃,此时建议您自己再查阅/usr/include/gtk-2.0/gdk/usr/include/gtk-3.0/gdk下相关的头文件。

1、gtk/gdk 2.0获取linux下鼠标的全局坐标

//返回参数得到的是鼠标的横纵坐标
void getMousePosition(int *mouseX,int *mouseY){GdkDisplay  *display;GdkScreen   *screen;GdkWindow   *window;gdk_init(NULL,NULL);//gdk代码必须使用该函数初始化gdk环境display = gdk_display_get_default();//获取默认的GdkDisplayscreen = gdk_display_get_default_screen(display);//获取默认GdkDisplay对应的默认GdkScreenwindow = gdk_screen_get_root_window(screen);//获取GdkScreen对应的GdkWindowgdk_window_get_pointer(window,mouseX,mouseY,0);//根据全局GdkWindow获取鼠标位置
}

2、gtk/gdk 3.0获取linux下鼠标的全局坐标

//参数分别是mouse的横纵坐标
void getMousePosition(int *mouseX,int *mouseY){GdkDisplay* ddpy;GdkDeviceManager* device_manager;GdkDevice* pointer;gdk_init(NULL,NULL);//使用gdk时必须要gdk_init()ddpy = gdk_display_get_default();   //获取默认的GdkDisplaydevice_manager = gdk_display_get_device_manager(ddpy);//获取gdk设备管理器pointer = gdk_device_manager_get_client_pointer(device_manager);//获取gdk表示的鼠标设备gdk_device_get_position(pointer,NULL,mouseX,mouseY);//获取鼠标设备的全局坐标
}

3、x11/xlib 获取linux全局鼠标位置

void getMousePosition(int* mouseX,int* mouseY){Display* dpy;XEvent e;dpy = XOpenDisplay(NULL);/*获取默认的x11 Display*///关注全局鼠标点击事件,注意该函数必须调用,否则XNextEvent()无法捕获到鼠标点击事件XGrabPointer(dpy,DefaultRootWindow(dpy),1,PointerMotionMask | ButtonPressMask | ButtonReleaseMask ,/*依次表示鼠标的移动、按下、抬起事件掩码*/GrabModeAsync,GrabModeAsync,None,None,CurrentTime);/*CurrentTime == 0,是宏定义*/while(1){//使用如下事件模拟鼠标点击事件XTestFakeButtonEvent(dpy,1,1,CurrentTime);//鼠标按下PressXTestFakeButtonEvent(dpy,1,0,CurrentTime);//鼠标抬起Release//XNextEvent()会阻塞等待事件产生XNextEvent(dpy,&e);if(e.type == ButtonPress){/*监测到鼠标点击事件*/*mouseX = e.xmotion.x_root;*mouseY = e.xmotion.y_root;break;/*监测到点击后,记录鼠标坐标,便立即退出while循环*/}}XCloseDisplay(dpy);/*关闭x11 Display*/
}

4、代码测试

  1. gtk/gdk代码测试(2.0 与3.0测试代码通用,只是getMousePosition()内部不同)
#include <stdio.h>
#include <gdk/gdk.h>
#include <unistd.h>void getMousePosition(int *mouseX,int *mouseY);int main(int argc,char* argv[]){int mouseX,mouseY;getMousePosition(&mouseX,&mouseY);printf("x=%d y=%d\n",mouseX,mouseY);return 0;
}
gtk-2.0 编译: gcc mouse-20.c -o mouse-20 `pkg-config --cflags --libs gtk+-2.0`
gtk-3.0 编译:gcc mouse-30.c -o mouse-30 `pkg-config --cflags --libs gtk+-3.0`

2)x11代码测试

/* 使用XTestFakeButtonEvent()模拟鼠标点击事件* 激活XNextEvent(),捕获到鼠标点击事件后打印鼠标的位置*/
#include <X11/Xlib.h>
#include <X11/extensions/XTest.h>
#include <stdio.h>void getMousePosition(int* mouseX,int* mouseY);int main(){int x,y;getMousePosition(&x,&y);printf("x=%d y=%d\n",x,y);return 0;
}
编译: gcc test.c -o test `pkg-config --cflags --libs x11 xtst`
或者: gcc test.c -o test -lX11 -lXtst

linux C语言获取鼠标的绝对坐标/位置相关推荐

  1. c语言中坐标xoy轴在哪里,用C语言在linux下获取鼠标指针的相对位置

    1. 关于"/dev/input/mice" 相信很多人都用过Linux,也许你发现不管是在X-window下面,还是在Console下面,鼠标都是可以操作的.那么你有没有考虑过这 ...

  2. js 获取鼠标在画布的位置_JS获取鼠标位置(鼠标坐标)

    在 JavaScript 中,当事件发生时,获取鼠标的位置是件很重要的事件.由于浏览器的不兼容性,不同浏览器分别在各自事件对象中定义了不同的属性,说明如下表所示.这些属性都是以像素值定义了鼠标指针的坐 ...

  3. openlayers学习——10、openlayers监听获取鼠标坐标位置

    openlayers监听获取鼠标坐标位置 前言:基于Vue,学习openlayers,根据官网demo,记录常用功能写法.本人不是专业GIS开发,只是记录,方便后续查找. 参考资料: openlaye ...

  4. div内鼠标坐标位置及绝对和相对坐标获取

    JQuery 获得div绝对,相对位置的坐标方法 1 2 3 4 5 6 获取页面某一元素的绝对X,Y坐标 var  X = $( '#DivID' ).offset().top; var  Y = ...

  5. Linux下输入子系统上报触摸屏坐标

    Linux下输入子系统上报触摸屏坐标 1.输入子系统简介   在 Linux 中,输入子系统是由输入子系统设备驱动层.输入子系统核心层(Input Core)和输入子系统事件处理层(Event Han ...

  6. 用 javascript 获取当页面上鼠标(光标)位置

    用 javascript 获取当页面上鼠标(光标)位置在许多情况下都会用到,比如拖放,悬停提示(tooltip) 等等.当然,这里我们依然要面对浏览器的兼容问题,在不同的浏览器下,对这些相关的属性处理 ...

  7. Synergy工具 共享Windows系统电脑Linux系统电脑 鼠标键盘

    Synergy工具 共享Windows系统电脑Linux系统电脑 鼠标键盘 相关软件相关文章发表评论 来源:西西整理时间:2014/11/6 15:03:11字体大小:A-A+ 作者:西西点击:24评 ...

  8. js鼠标移动到指定位置_Python: pyautogui模块之鼠标控制

    文章背景:PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,利用它可以实现自动化任务.pyautogui模块中包含了一些函数,可以模拟鼠标移动.按键和 ...

  9. js点击获取—通过JS获取图片的相对坐标位置

    一.通过JS获取鼠标点击时图片的相对坐标位置 源代码如下所示: 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <h ...

  10. vue 拖拽小图标获取坐标位置

    遇到一个功能,在固定的一张图或者说一个框内有一个小图标可以拖拽,并且能拿到他当前位置的坐标,如下图 二维码小图标代码如下 <!-- 拖拽小图标 v-drag:拖拽效果,配置当前元素positio ...

最新文章

  1. php中怎么使用table,thinkphp中的table方法怎样使用?
  2. PyTorch实现,GitHub star 4k+:这是微软开源的计算机视觉库
  3. 企业运维——机房建设的一些建议
  4. 算术运算的RTL代码规则总结
  5. 20. A *p=NULL,p 可以调用 A 类里面的函数嘛?
  6. SQLite 数据类型(http://www.w3cschool.cc/sqlite/sqlite-data-types.html)
  7. qt double 相减不为0_Qt音视频开发25-ffmpeg音量设置
  8. MacOSX环境上的多个Java JDK
  9. leetcode1247. 交换字符使得字符串相同(贪心)
  10. linux7配置dns服务器,centOS7搭建DNS服务器配置详解
  11. week08 S8-01 docker images tensorflow-jupyter
  12. js 串口通信mscomm接收undefined_VB串口通信应用开发入门知识讲解
  13. [C/C++][经典探讨]类继承中,通过基类指针delete释放,是否会造成内存泄漏
  14. python和pytorch关系_pytorch 模拟关系拟合——回归实例
  15. Web大学生网页作业成品~美食餐饮网站设计与实现(HTML+CSS+JavaScript)
  16. vb mysql 实例_VB与数据库的交互经典例子总结
  17. im即时通讯源码+软件+app附详细封装视频搭建教程
  18. Java8新特性Stream流、Stream多字段排序
  19. 微信小程序上传照片加水印
  20. css中大于号是什么意思是,CSS里的大于号是什么意思?

热门文章

  1. 屏幕录像专家 EXE视频转MP4
  2. TPC_mcgs打印方案
  3. 第十七章 - 垃圾回收器
  4. OpenJudge NOI题库 116题
  5. 网狐6603全部架设过程棋牌源码下载搭建教程
  6. 程序员如何在百忙中更有效地利用时间,如何不走岔路,不白忙(忙得要有效率,要有收获)
  7. 2009年度优科豪马轮胎全国经销商会议在三亚召开
  8. 数论著作读书笔记(2013-04-14 23:22)
  9. linux dnf配置文件,RedHat8.1配置本地dnf源
  10. GitLab之创建项目组及项目