2010-11-22 95 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