Linux下的鼠标操作
来源:互联网 发布:淘宝寄到国外怎么收费 编辑:程序博客网 时间:2024/06/11 18:51
恩,一分钱,一分货!我坚信这一点!所以我现在坚持用MS的Vista,正版的哦!
言归正传,前段时间因为工作,需要在Linux下操作鼠标,当然啦,肯定不会是在X-window下操作,那样的话也就不会有这篇文章的存在了。我要做的就是在Console下面得到鼠标的坐标。百度、谷歌都用上了,可就是找不到相关的资料。无奈之下,只能拿起Linux的内核啃代码了。下面是这段时间的成果:
1. 关于"/dev/input/mice"
相信很多人都用过Linux,也许你发现不管是在X-window下面,还是在Console下面,鼠标都是可以操作的。那么你有没有考虑过这些鼠标都是从哪来的?
不错!他们都是从"/dev/input/mice"这个文件里来的。如果你对Linux比较熟,那么你肯定看得出来这是一个设备文件。"mice"就是Linux下面鼠标的设备文件,不管你用的是PS2的还是USB的,所有关于鼠标的操作都被抽象到"mice"这个文件中。
2. "mice"之母
"mice"之母是谁?female mouse? 当然不是!在linux下面,她是"mousedev.c"这个文件。你可以在内核的"Drivers/input"目录里找到她。在她那里,你可以得到关于"mice"的一切。但是我想99%的人对于"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 <stdio.h>
#include <fcntl.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <linux/input.h>//鼠标键盘事件
int main(int argc,char **argv)
{
int fd, retval;
char buf[6];
fd_set readfds;
struct timeval tv;
if(( fd = open("/dev/input/mice", O_RDONLY))<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;
}
- Linux下的鼠标操作
- Linux下的鼠标操作
- Linux字符界面下的鼠标操作
- Linux环境下模拟鼠标操作
- 我是怎样实现linux下基于多点识别控制全局鼠标操作的
- TC下鼠标操作
- 浅析linux下鼠标驱动的实现
- 浅析linux下鼠标驱动的实现
- 浅析linux下鼠标驱动的实现
- Linux下的鼠标手势软件easystroke
- 浅析linux下鼠标驱动的实现
- linux下隐藏鼠标的方法
- Linux 下鼠标对应的文件
- linux下鼠标键盘按键的模拟
- linux下隐藏鼠标的方法
- Linux 下鼠标对应的文件
- 常用的鼠标操作
- Linux下线程的操作
- c强制退出本进程自己,vc关闭自己
- 总结 使用PHP作为中间介来实现android链接远程数据库。
- HDU 4709 Herding(热身赛第四题)
- 华为历年机试题2014
- Poj 1144 Network (割点)
- Linux下的鼠标操作
- JAVA编码注意事项
- /usr/bin/ld: cannot find -lX11
- 西北工业大学羽毛球QQ群
- Android中shape的使用
- 如何在多线程下保证Lazy初使化对象的完全整性与正确-The "Double-Checked Locking is Broken" Declaration
- 透明 delphi
- HDU 4710 && HDU 4611 Balls Rearrangement (热身赛第五题)
- 当menu显示不出来的时候