怎样在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类的组合键吗?
谢谢了
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。