linux怎么获取键盘的值?

pcwung 2010-06-04 11:33:33
标准键盘。
不用stdin的东西(没法工作在终端下,说法可能不对)。
现在键盘是/dev/input/event0.
想通过读event0得到键盘的值,不管是扫描还是什么,只要读出来就对。

通过结构体input_event对数字键盘上的数读出来的都是code69.。其他的键好像是对的。

想知道怎么处理numlock。?还有这个方法是不是对的。。
我在pc上测试得到的code按什么键都是返回同一个值。。。。


include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <string.h>
#include <fcntl.h>
#include </workdir/kern/linux-2.6.20/include/linux/input.h>


int main(int argc, char **argv)
{
int fd;
int a;
int i;
int flag11;
unsigned char strOutput[8];

struct input_event inmyself;
fd=open("/dev/input/event0",O_RDWR);
if(fd==-1){printf ("open keyboard err:%d\n",fd);}

goon: flag11=read(fd, &inmyself, sizeof(inmyself));
if(fd==-1){printf ("read keyboard err:%d\n",fd);}
else
//{for(i=0;i<8;i++)
{
printf ("type :%d\n",inmyself.type);
printf ("code :%d\n",inmyself.code);
printf ("value :%d\n",inmyself.value);}
if (inmyself.value) goto goon;
//}
close(fd);
return 0;
}
...全文
1372 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pcwung 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cr4315 的回复:]

我用while循环打印出code,type,value的值,每一次循环都打印出三次,那请问这是什么原因,还有这三个变量code,type,value分别代表什么意义。麻烦能不能指导下。谢谢!
[/Quote]

?3次?我这不是3次呢?我得到的是2次和6次。。6次是在numlock按下的情况下。。2次的情况下是value是1和0.
6次的时候第一,第二次,第五,第六次是返回的是69(numlock),value分别是1和0 。。第三次和第二次返回的是当前的键值,value是1和0;

code:表示的是键值码。
type:0,表示是键盘,1表示是鼠标,和其他
value:1表示按下,0表示没有按下,2表示一直按下
cr4315 2010-06-08
  • 打赏
  • 举报
回复
我用while循环打印出code,type,value的值,每一次循环都打印出三次,那请问这是什么原因,还有这三个变量code,type,value分别代表什么意义。麻烦能不能指导下。谢谢!
pcwung 2010-06-07
  • 打赏
  • 举报
回复
谢谢,,奋斗成就男人!。你说的是对的。。我现在发现了现在小键盘的numlock是这样的,第一次读到的code是69,但是value是1.第二次读到的code仍然是69,value是0.第三次读到的才是本身的值(value,1)。然后(第四次)是一个本身的值的value为0的值。然后再是两个code为69的value分别为1和0的值。。


to:cr4315。。失败的原因很多,用zjyu88的方法先看看把键盘和鼠标都建成了什么节点,如果没有的话,可能还要加其他handler驱动。

两次谢谢大家
zjyu88 2010-06-06
  • 打赏
  • 举报
回复 1
[Quote=引用 3 楼 cr4315 的回复:]

仁兄,请问一下,我机子鼠标时ps/2,键盘是usb的,但是我打开/dev/input/mouseX或者/dev/input/eventX总是提示失败?是不是鼠标或键盘的设备文件不在这个目录下?
[/Quote]

没用PS/2鼠标很久,但通过INPUT EVENT的事件都在/dev/input/event*里的,或者你可以通过以下查看你的设备与节点的关联:
cat /proc/bus/input/device
念茜 2010-06-04
  • 打赏
  • 举报
回复
我也想问这个问题
cr4315 2010-06-04
  • 打赏
  • 举报
回复
仁兄,请问一下,我机子鼠标时ps/2,键盘是usb的,但是我打开/dev/input/mouseX或者/dev/input/eventX总是提示失败?是不是鼠标或键盘的设备文件不在这个目录下?
chenee543216 2010-06-04
  • 打赏
  • 举报
回复
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};

lz的方法是对的,就这样读取,具体代码细节仔细调

2 num lock,你按一下试试有没有键值?然后比较numlock后小键盘的值是否有变化;
我没有仔细研究,不外乎2种,:1 numlock后小键盘值不同---->ok,2 小键盘值相同,自己判断numlock----> ok
chenee543216 2010-06-04
  • 打赏
  • 举报
回复
$sudo cat /dev/input/event0;按小键盘得到如下结果,说明,input层返回的是对的
^[[1~^[[A^[[5~^[[D^[[C^[[6~^[[B^[[B^C

4,438

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧