Linux X11环境下C语言统计鼠标按键数异常问题求助
问题:使用XInput统计鼠标按键数量结果异常
我正在用C语言编写统计鼠标按键数量的程序,选择用XI.h实现,但程序运行结果不符合预期。
注:提供的代码来自一个更大的程序,包含的诸多库无需关注。
程序代码(mouse.c)
#include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/extensions/Xfixes.h> #include <X11/extensions/XInput.h> #include <X11/extensions/XI.h> #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> /* socket() connect() bind() listen() accept() socketpair() */ #include <sys/types.h> #include <unistd.h> #include <string.h> /* strcpy() */ #include <stdio.h> /* perror() */ #include <errno.h> /* error numbers */ #include <stdlib.h> int main ( void ) { XDeviceInfo mouse_info; XDeviceInfoPtr ptr_mouse_info; XDevice *mouse; XID mouse_id; XButtonInfoPtr ptr_mouse_buttons; XKeyInfoPtr ptr_mouse_keys; XValuatorInfoPtr ptr_mouse_axes; char * mouse_name; int num_devices, num_props, i; Display *display = XOpenDisplay(NULL); if (display == NULL) { perror("XOpenDisplay error"); exit(-1); } ptr_mouse_info = XListInputDevices(display, &num_devices); for (i = 0; i < num_devices; i++) { if (XInternAtom(display, XI_MOUSE, 1) == ptr_mouse_info[i].type) { mouse_id=ptr_mouse_info[i].id; mouse_name=ptr_mouse_info[i].name; mouse = XOpenDevice(display, mouse_id); ptr_mouse_buttons = (XButtonInfoPtr)&ptr_mouse_info[i].inputclassinfo[ButtonClass]; ptr_mouse_keys = (XKeyInfoPtr) &ptr_mouse_info[i].inputclassinfo[KeyClass]; printf("Mouse name: %s\n", mouse_name); printf("Number of buttons: %d\n", ptr_mouse_buttons->num_buttons); printf("Number of keys: %d\n", ptr_mouse_keys->num_keys); } } printf("Mouse name: %s\n", mouse_name); printf("Number of buttons: %d\n", ptr_mouse_buttons->num_buttons); printf("Number of keys: %d\n", ptr_mouse_keys->num_keys); XFreeDeviceList(ptr_mouse_info); exit(0); }
编译命令
cc mouse_test.c -lX11 -lXfixes -lXi -o mouse_test
程序输出(不符合预期)
我的鼠标实际有7个按键,但程序输出始终如下:
Mouse name: Logitech Mechanical keyboard Logitech Mechanical keyboard Keyboard Number of buttons: 4 Number of keys: 2 Mouse name: ROCCAT ROCCAT Kone Pro Keyboard Number of buttons: 4 Number of keys: 2 Mouse name: ROCCAT ROCCAT Kone Pro Number of buttons: 4 Number of keys: 2 Mouse name: ROCCAT ROCCAT Kone Pro Number of buttons: 4 Number of keys: 2
我怀疑这可能和Linux驱动有关,但不确定。
内容的提问来源于stack exchange,提问作者Loxbert Loxdogs Asher
相关产品推荐
相关产品推荐

