1. 关于"/dev/input/mice"

相信很多人都用过Linux,也许你发现不管是在X-window下面,还是在Console下面,鼠标都是可以操作的。那么你有没有考虑过这些鼠标都是从哪来的?

不错!他们都是从"/dev/input/mice"这个文件里来的。如果你对Linux比较熟,那么你肯定看得出来这是一个设备文件。"mice"就是Linux下面鼠标的设备文件,不管你用的是PS2的还是USB的,所有关于鼠标的操作都被抽象到"mice"这个文件中。

2. "mice"之母

在linux下面,她是"mousedev.c"这个文件。你可以在内核的"Drivers/input"目录里找到她。在她那里,你可以得到关于"mice"的一切。

3. 坐标

如何得到mouse的当前坐标值?可通过如下几步:

1)打开"/dev/input/mice"文件。

2)读3个字节。三个字节的值分别是“Button类型”,“X的相对位移”,“Y的相对位移”。这里先用Button, xRel, yRel表示。

3)取Button的低3位(Button & 0x07)。0x00 = LeftButtonUp, 0x01 = LeftButtonDown, 0x02 = RightButtonDown.

4)因为这里取得是相对位移,所以X, Y要分别与上一次的坐标值相加。xPos += xRel; yPos +=yRel.

#include

#include

#include

#include

#include

#include

#include

#include

int main(int argc,char **argv)

{

int fd, retval;

char buf[6];

fd_set readfds;

struct timeval tv;

// 打开鼠标设备

fd = open( "/dev/input/mice", O_RDONLY );

// 判断是否打开成功

if(fd<0) {

printf("Failed to open \"/dev/input/mice\".\n");

exit(1);

} else {

printf("open \"/dev/input/mice\" successfuly.\n");

}

while(1) {

// 设置最长等待时间

tv.tv_sec = 5;

tv.tv_usec = 0;

FD_ZERO( &readfds );

FD_SET( fd, &readfds );

retval = select( fd+1, &readfds, NULL, NULL, &tv );

if(retval==0) {

printf( "Time out!\n" );

}

if(FD_ISSET(fd,&readfds)) {

// 读取鼠标设备中的数据

if(read(fd, buf, 6) <= 0) {

continue;

}

// 打印出从鼠标设备中读取到的数据

printf("Button type = %d, X = %d, Y = %d, Z = %d\n", (buf[0] & 0x07), buf[1], buf[2], buf[3]);

}

}

close(fd);

return 0;

}

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

  1. c语言中怎么暂停一个一个游戏,求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束...

    求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束 /* 以下是主要的逻辑代码,还有些.c和.h就没发了 ...

  2. c语言中不能编译,为什么`int;`可以在C语言中很好地编译,而在C ++中却不能?

    考虑以下程序(请参见此处的现场演示). #include int main(void) { int ;  // Missing variable name puts("Surprise&qu ...

  3. c语言中函数名可不可以由用户命名,C语言中变量名及函数名的命名规则与驼峰命名法...

    在程序设计中,变量名.函数名.数组名等统称为标识 符.简单地说,标识符就是一个名字.除库函数的函数名由系统定义外,其余都由用户自定义.C语言规定,标识符只能由字母(a-z,A-Z).数字 (0-9). ...

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

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

  5. WPF中获取鼠标相对于桌面位置

    原文:WPF中获取鼠标相对于桌面位置 var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFr ...

  6. c语言编号程序,c语言中如何在一个程序语句前加编号c语言中如何在一个程序语句前加...

    多数情况下,现在的编程高手都是从学习C 语言入门的,在学校里,计算机相关专业中最基础的课程也包括C 语言,因此,掌握好这门课程对每一位立志成为优秀程序员的初学者来说是大有裨益的!另外,对想通过参加全国 ...

  7. c语言中存储字符用什么函数,那些C语言中你不知道的字符串函数(坑)

    1.strcpy() 在字符串拷贝函数中,它的函数编写不难,如下 char* Strcpy(char* dest, const char* src) { assert(dest != NULL &am ...

  8. c语言中字符减减自符意思,C语言中的自加自减运算

    [摘 要]C语言中运算符十分丰富,自加运算和自减运算是c语言的教学中的重点和难点,但我们只要在教学中抓住运算的基本定义,通过经典题型分析和适度深入解析,就不难达到熟练应用之目的. [关键词]运算的定义 ...

  9. c语言中的关于数学问题的编程,C语言中具有代表性几种数学问题编程技巧探索.doc...

    C语言中具有代表性几种数学问题编程技巧探索 C语言中具有代表性几种数学问题编程技巧探索 [摘要]本文分析了C语言中几种常见的具有代表性的几类数学问题,从数学规律.语法结构分析.语句优化设计及应用方面, ...

最新文章

  1. 1048 数字加密 (20 分)java
  2. ios 百度地图指定区域_iOS开发(第三方使用)——百度地图的简单使用(定位与当前位置的显示)...
  3. jenkins邮件通知功能
  4. Linuxtone命令一句话
  5. jQuery将不再支持IE6/7/8
  6. 系统补丁自动批量安装
  7. es通过mapping创建索引出错
  8. 阿里半跪过、任正非差点跳楼、京东被骗光钱:成年人的生活哪有容易二字?...
  9. 电商海报模板|psd分层海报素材轻松教你凸显你的主体产品!
  10. LKCOS:基于程序移植的COS系统
  11. SpringMvc的 @Valid 拦截到的异常如何抛出
  12. Bailian4151 电影节【贪心】
  13. 指示函数和sign函数(符号函数)
  14. 离线手动更新卡巴斯基
  15. 函数式编程可以配合装饰器使用
  16. c语言程序集合幂集,C语言 生成集合的幂集
  17. 论开学第二个月干了点啥
  18. win下安装nessus
  19. Java Spider介绍
  20. Unity3D 手机摇一摇 实现震动效果

热门文章

  1. 【渝粤题库】国家开放大学2021春1121健康教育与健康促进题目
  2. java编程彩球滑梯作弊_课内资源 - 基于C++的学生成绩管理系统
  3. OpenFlow和SDN的历史和原理介绍
  4. VS2017无法打开文件MSVCRTD.lib
  5. 【从零开始搭建自己的.NET Core Api框架】(二)搭建项目的整体架构
  6. Bootstrap之栅格系统
  7. Matlab和C++混合编程
  8. 设置文字多行显示溢出显示省略号
  9. C#找出数组中重复次数最多的数值
  10. 关系数据库的几种设计范式介绍