linux c键盘监听,怎样在linux c中得到按键的键盘扫描码呢

怎样在linux c中得到按键的键盘扫描码呢

(2012-06-08 03:21:34)

标签:

linux

按键

杂谈

怎样在linux c中得到按键的键盘扫描码呢有人知道怎样得到按键的键盘扫描码吗?包括复合按键,如Alt+F1, Control+F1,

F11, F12.

我需要看哪些资料呢?谢谢大家了。我知道xev

http://www.x.org/wiki/XInputSpec?highlight=(xev)回复 #2 nlylidb

的帖子谢谢您的回复!

我先看看你给的链接,不懂再问你。回复 #2 nlylidb

的帖子不好意思,我到了那个页面,但是我该看哪个部分?谢谢你了!http://www.x.org/wiki/Development/Documentation/InputEventProcessing

介绍X input event的产生和处理的我现在遇到的问题是:

需要在linux c中找到能读入组合键的方法:

如: Alt+A, Alt+B~Alt+Z

Alt+0, Alt+1~Alt+9, Alt+-, Alt+=

Alt+F1, Alt+F2~Alt+F10

F11, F12

Ctr+F1, Ctr+F2, Ctr+F3, Ctr+F10

Esc

已经试过的方法有:

1, 使用ncurses中的getch

遇到的问题是:能得到方向键,Home键等,但是对于Alt组合键不能工作,

eg, 按Alt+A键和单独按A键的值是一样的。

2, 利用终端输入,输出

遇到的问题是:

a, 按Alt+F1, Alt+F2, Alt+F4,Alt+F5, Alt+F6,Alt+F7, Alt+F8, Alt+F9,

Alt+F10都不能工作,

要么响应操作系统按键了http://www.lesusbridal.com,比如Alt+F4,关闭当前的窗口;

要么按了之后,程序得不到值;

b, Ctrl+F1得不到值。

大家有没有什么好的建议啊,难道一定要写汇编语言吗?多谢了

感激涕零啊!后来,我自己仿照showkey这个命令编写了程序,可以得到组合键的扫描码,这样就可以区别各个键了。

但是,现在又有问题了

组合键得到的是一串键的序列,比如说,我按Alt+A键,如果用户按的快一些,

这些扫描码就保存在一个buffer里,

如果用户按的慢一些,这些扫描码就保存在多个buffer里,但读后面的A键这个buffer时,会清除掉以前存Alt键的buffer.

我现在的方法,是将Alt是按下还是没按下的状态保存在全局变量里,但显然有很多问题。

所以,我看网上说ncurses可以解决组合键的问题,但是它没有sample代码关于这方面的,只有介绍ncurses处理Home,

方向键的文档,大家有什么建议么?我现在是欲哭无泪啊!谢谢了。Linux是多用户多任务操作系统,你一个进程搞得怎么深,别的进程怎么活?

楼主想做什么?回复 #8 beepbug

的帖子我想做的就是http://www.456809.com/:根据用户的输入,能读出Alt和Ctrl组合键。

就是下面的:

如: Alt+A, Alt+B~Alt+Z

Alt+0, Alt+1~Alt+9, Alt+-, Alt+=

Alt+F1, Alt+F2~Alt+F10

F11, F12

Ctr+F1, Ctr+F2, Ctr+F3, Ctr+F10

Esc

读键盘的输入,我用的是:中的size_tread(int

fildes, void *buf, size_t nbytes)

它在处理组合键时就采取的是:

如果用户按的快一些,

这些扫描码就保存在一个buffer里,

如果用户按的慢一些,这些扫描码就保存在多个buffer里,

但读后面的A键这个buffer时,会清除掉以前存Alt键的buffer.

比如:Ctrl+A, 按下和放开是单独事件,

可能用户按的快,就都一次性保存在一个buffer里了,

但是用户按的慢的话,就可能保存在2个,3和甚至4个buffer里。

这是系统自己做的,我是调用者。论坛里有熟悉ncurses的吗?它可以处理Alt+A, Ctrl+A类的组合键吗?

谢谢了

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值