2010-11-22 121 views
3

他们问如何捕获键,如F11或insand getchr不返回键的那些东西,并没有什么我能找到的工作是接受来自输入事件的原始输入..getch返回-1?

我现在想的ncurses /诅咒在C++程序中捕获这些密钥。

我的测试程序很简单,它基本上是:

#include <stdlib.h> 
#include <stdio.h> 
#include <curses.h> 
int main() { 
    int car; 
    while(c != '\b') { 
     c = getch(); 
     printf("%i", c); 
    } 
    return 0; 
} 

我使用它,当然另一个相同的getch()函数,但它返回-1无限次..我用最近的内核在Arch linux中,在一个标准的终端(也在xterm中测试过)

是否有某个开关需要打开才能在库中使用此getch()?

回答

7

在致电getch()之前,您需要致电initscr();来初始化诅咒。此外,您可能还需要非线路缓冲模式,因此您还应该呼叫cbreak(); noecho();(回声模式不应与Cbreak模式一起使用)。

+0

我不是诅咒专家,但它似乎也可能要调用'keypad(stdscr,TRUE);'这样ncurses可以转换特殊键转义序列并从getch()返回由* KEY_ *宏。例如'if(getch()== KEY_F0 + 11){/ * f11 pressed * /}' – 2010-11-22 01:23:32

+0

谢谢。由于某些原因,我的FN密钥在Linux上不起作用,所以我无法测试这些密钥,但它确实适用于插入和不希望的奇怪密钥。我希望我不需要将来自内核的原始键盘输入映射到那些fn + ins键和东西得到暂停:\ – John 2010-11-22 01:30:19