如何获取鼠标滚轮的状态?
如题,就是鼠标左右键中间的滚轮,这段代码只能获取鼠标移动的相对位置以及按键,而无法获取滚轮的状态。
#include <stdio.h>#include <stdlib.h>#include <linux/input.h>#include <fcntl.h>#include <sys/time.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>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 = 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;}
tatic void mousedev_key_event(struct mousedev *mousedev, unsigned int code, int value){ int index; switch (code) { case BTN_TOUCH: case BTN_0: case BTN_LEFT: index = 0; break; case BTN_STYLUS: case BTN_1: case BTN_RIGHT: index = 1; break; case BTN_2: case BTN_FORWARD: case BTN_STYLUS2: case BTN_MIDDLE: index = 2; break; case BTN_3: case BTN_BACK: case BTN_SIDE: index = 3; break; case BTN_4: case BTN_EXTRA: index = 4; break; default: return; } if (value) { set_bit(index, &mousedev->packet.buttons); set_bit(index, &mousedev_mix->packet.buttons); } else { clear_bit(index, &mousedev->packet.buttons); clear_bit(index, &mousedev_mix->packet.buttons); }}