2010-05-07 3 views
1

키보드에서 사용자 입력과 관련된 응용 프로그램을 작성하고 있습니다. 그 일을 위해 내가 입력 읽기의 방법을 사용키보드 입력 : 사용자로부터받은 키 코드를 분리하는 방법

#include <stdio.h> 
#include <termios.h> 
#include <unistd.h> 

int mygetch() { 
    struct termios oldt, 
       newt; 
    int   ch; 
    tcgetattr(STDIN_FILENO, &oldt); 
    newt = oldt; 
    newt.c_lflag &= ~(ICANON | ECHO); 
    tcsetattr(STDIN_FILENO, TCSANOW, &newt); 
    ch = getchar(); 
    tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 
    return ch; 
} 

int main(void) 
{ 
    int c; 
    do{ 
    c = mygetch(); 
    printf("%d\n",c); 
    }while(c!='q'); 
    return 0; 
} 

Everyting는 문자 숫자, 탭하지만 잘 동작을 나는 1 만 3받지 아니 DEL, LEFT, CTRL + LEFT, F8 (및 기타) hiting 때, 4,5 또는 심지어 6 키 코드.

질문 :이 키 코드를 분리 할 수 ​​있습니까? 실제로 하나의 키 또는 키 조합 만 누르는 것이 사실입니다. 싶습니다 어떤

모든 입력 형식 (문자, 숫자, F1-F12, DEL PGUP, PGDOWN, CTRL + A, CTRL + ALT + A하는 단일 정수 값을 반환하는 기능을 가지고있다 , ALT + LEFT 등). 이것이 가능한가?

저는이 아이디어에 관심이 있습니다. 언어는별로 중요하지 않지만 perl이나 c를 선호합니다. 당신은 ANSI 이스케이프 코드를 받고있는 것처럼

감사합니다,

이 울리

답변

2

curses 또는 ncurses 라이브러리 (또는 속어 일 가능성이 있음)를 조사하고 싶을 것입니다.

터미널, 터미널 창 및 콘솔은 모두 실제 터미널 (직렬 케이블을 통해 컴퓨터에 연결된 화면과 키보드)을 모델로하고 터미널은 teletype 장치 (tty - 키보드 및 간단한 프린터).

다른 터미널 (실제 터미널, psudoterminals 및 콘솔)은 기능 키와 화살표 키와 같은 특수 문자에 대해 다른 표현을 가질 수 있습니다. 잠재적으로 누군가가 터미널과 컴퓨터 사이에서 보낼 수있는 256 가지 이상의 것들이 있기 때문에이 작업을 수행합니다.

curses가하는 많은 것들 중 하나는 다른 터미널이 제공하는 입력을 받아 터미널 타입을 사용하여 해당 키를 나타내는 정수를 생성합니다. 또한이 값에 대한 매크로 상수를 제공하므로 KEY_DOWN을 curses 'getch의 결과와 비교하여 아래쪽 화살표가 눌려 졌는지 여부를 확인할 수 있습니다.

또는을 확인하거나 저주와 많은 정보를 얻을 수 있습니다.

+0

웹에서 관련 정보를 찾을 수 없습니다. 링크 또는 간단한 예가 있습니까? 감사합니다 – INS

+1

http://tinyurl.com/23lqrs5 – nategoose

+0

나는 이것을 최고의 대답으로 생각할 것입니다. 감사 – INS

1

는 소리. 너는 this link에 정보를 사용하여 그들을 쉽게 끊을 수있다. 특정 시스템에는 특수한 경우가있을 수 있지만 너무 많은 문제없이 식별하고 정렬 할 수 있어야합니다.