加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读