您的位置:首页 > 其它

关于Unix上读取键盘输入的问题(curses) Esc 和 PgUp返回的值相同,如何区别?

2009-01-09 13:45 555 查看
关于Unix上读取键盘输入的问题(curses) Esc 和 PgUp返回的值相同,如何区别?






加为好友
发送私信
在线聊天



jiantiantian
该用户很懒,没有设置昵称
等级:


可用分等级:长工
总技术分:10
总技术分排名:222917
结帖率:100.00%

发表于:2009-01-05 10:23:47 楼主
可以用下面的代码进行测试,我的机器是HP-UX zx6000 B.11.23。
Esc 和 PgUp都返回的是0x1b,怎么能区别开呢?

#include <stdio.h>
#include <curses.h>

main()
{
int c;

initscr();
crmode();
nonl();
raw();
noecho();

keypad(stdscr, 1);
mvwprintw(stdscr, 0, 1, "Please Input Key:");
refresh();
c = getch();
mvwprintw(stdscr, 20, 1, "input key:0x%x", c);

if(c == 0x107)
{
printw("delete/n");
}
refresh();

endwin();

return 0;
}

cc curses.c -l curses
问题点数:20 回复次数:2 显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复



加为好友
发送私信
在线聊天



jiantiantian
该用户很懒,没有设置昵称
等级:


可用分等级:短工
总技术分:10
总技术分排名:222917

发表于:2009-01-07 09:07:531楼 得分:0
怎么没有人回答呢?
修改 删除 举报 引用 回复



加为好友
发送私信
在线聊天



jiantiantian
该用户很懒,没有设置昵称
等级:


可用分等级:短工
总技术分:10
总技术分排名:222917

发表于:2009-01-09 13:48:582楼 得分:0
自己回答吧

使用curses库是没有办法区别的。

可是使用stty命令对终端进行设置,可以及时响应。
也可以对ESC键和PgUp等进行判断。
代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/fcntl.h>

//sttyコマンドは標準出力で使用される端末の設定と確認を行うことができます。
//コマンドリファレンスはこちらを参考に。
//http://www.linux.or.jp/JM/html/GNU_sh-utils/man1/stty.1.html

int keyInput1(char ab_Chr[])
{

int gi_Tty;

/* 端末を入力モードでオープン */
if((gi_Tty = open("/dev/tty",O_RDONLY)) == -1)/* 異常時 */{
/* 異常で復帰 */
return -1;
}
system("stty raw -echo");
read(gi_Tty, ab_Chr, 5);
close(gi_Tty);
system("stty -raw echo");

return 0;
}

int main()
{
char t_ReadBuf[250];
char ab_Chr[250];

int c ;
memset(ab_Chr, 0x00, sizeof(ab_Chr));

printf("+++++ Call keyInput1 +++++++/n");
printf("Please Input Key:/n");
keyInput1(ab_Chr);
printf("/n input key:0x%x/n",ab_Chr[0]);

for(int i=0; i < 5; i++)
{
printf("---input key ab_Chr[%d] :0x%x/n",i, ab_Chr[i]);
}
}

$ ./a.out (esc的执行结果)
+++++ Call keyInput1 +++++++
Please Input Key:

input key:0x1b
---input key ab_Chr[0] :0x1b
---input key ab_Chr[1] :0x0
---input key ab_Chr[2] :0x0
---input key ab_Chr[3] :0x0
---input key ab_Chr[4] :0x0
$ ./a.out (PgUP的执行结果)
+++++ Call keyInput1 +++++++
Please Input Key:

input key:0x1b
---input key ab_Chr[0] :0x1b
---input key ab_Chr[1] :0x5b
---input key ab_Chr[2] :0x33
---input key ab_Chr[3] :0x7e
---input key ab_Chr[4] :0x0

但是不能与curses进行配合使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐