Ncurses阅读小键盘和逃脱
发布时间:2020-12-15 21:33:13 所属栏目:安全 来源:网络整理
导读:我试图使用ESC来逃避使用getch()的程序.我创建了一个小程序来演示我的问题. #include ncurses.hint main(void) { int key = 0; initscr(); noecho(); keypad(stdscr,TRUE); do { key = getch(); clear(); mvprintw(0,"Key = %dn",key); refresh(); } while
我试图使用ESC来逃避使用getch()的程序.我创建了一个小程序来演示我的问题.
#include <ncurses.h> int main(void) { int key = 0; initscr(); noecho(); keypad(stdscr,TRUE); do { key = getch(); clear(); mvprintw(0,"Key = %dn",key); refresh(); } while (key != 27); clear(); refresh(); endwin(); return 0; } 我试图允许用户使用箭头键或键盘(以更方便的方式) 问题出在键盘内(无论numlock是否打开).当我编译并运行程序并尝试在这个简单的测试中使用小键盘时,它会在我触摸小键盘时立即退出.如果我删除while(键!= 27)(esc为27)条件,它会读取键并显示它们的数字.当小键盘键注册为时,为什么它会退出循环 ENTER 343 UP 120 DOWN 114 LEFT 116 RIGHT 118 任何帮助深表感谢! 解决方法
我在Dungeon Crawl Stone Soup的源代码中找到了修复.它基本上设置了那些密钥代码.
{DCSS-dir} /source/libunix.cc(333) define_key(" 33Op",1000); define_key(" 33Oq",1001); define_key(" 33Or",1002); define_key(" 33Os",1003); define_key(" 33Ot",1004); define_key(" 33Ou",1005); define_key(" 33Ov",1006); define_key(" 33Ow",1007); define_key(" 33Ox",1008); define_key(" 33Oy",1009); // non-arrow keypad keys (for macros) define_key(" 33OM",1010); // Enter define_key(" 33OP",1011); // NumLock define_key(" 33OQ",1012); // / define_key(" 33OR",1013); // * define_key(" 33OS",1014); // - define_key(" 33Oj",1015); // * define_key(" 33Ok",1016); // + define_key(" 33Ol",1017); // + define_key(" 33Om",1018); // . define_key(" 33On",1019); // . define_key(" 33Oo",1020); // - // variants. Ugly curses won't allow us to return the same code... define_key(" 33[1~",1031); // Home define_key(" 33[4~",1034); // End define_key(" 33[E",1040); // center arrow (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |