반응형
커서 이동키, 특수키의 입력은 어떻게 정의되어있을까? |
키보드의 입력은 스캔 코드로 정의되어있습니다. 지금은 생소한 단어가 되어버린 스캔 코드표 대신에 직접 키를 입력받아 어떤 코드가 입력되는지 알아보는 프로그램을 실행해보는 것도 좋은 방법입니다.
누르는 키의 종류를 판별해서 문자, 확장키 코드를 출력하는 프로그램 |
아래 코드는 누르는 키의 종류를 판별해서 문자, 확장키 코드를 출력하는 프로그램입니다.
conio.h에 정의된 _getch() 입력 함수를 이용해서 기능 키(F1~F12), 확장키, 일반 문자 등 키보드의 입력을 받을 수 있는 프로그램이죠.
q를 누르면 q의 코드를 출력하면서 종료하게 되어있습니다.
//==========================================================================
/**
* @file fosterahope.c
* @brief Function Key와 일반 키 입력을 구분받아 코드를 알아내는 프로그램
* @author fosterahope.tistory.com
*///========================================================================
//=======================
// Header Include
//=======================
#include <stdio.h>
#include <conio.h> // _getch()
#include <stdlib.h>
//==========================================================================
/**
* @brief main Entry 함수
* @return int : 0
*///========================================================================
int main(void)
{
int ch = 0;
printf("종료하려면 q를 누르세요.\n");
while (1)
{
ch = _getch(); // 처음 키 입력을 받는다.
if (ch == 0xE0 || ch == 0)
{
printf("Function Key 초기화 코드 : 0x%x, ", ch);
ch = _getch();
printf("Function Key 입력 코드 = 0x%x\n", ch);
}
else
{
// 표시할 문자가 있을 때 입력 코드가 들어온다.
if(ch >= ' ' && ch <= '~') // if (ch >= 0x20 || ch <= 0x7f)
{
printf("일반 문자 - 문자 : %c, 코드 : 0x%x\n", ch, ch);
}
else
{
printf("특수 키 - 코드 = 0x%x\n", ch);
}
if (ch == 'q')
{
break;
}
}
} // end while
return 0;
}
일반적으로 키보드 문자 입력은 아스키 코드를 따르는데, 아스키코드의 문자 영역은 0x20~0x7F라고 보시면 될 것 같습니다. 나머지는 특수 키 영역이고요, 처음 문자가 스페이스 바, 마지막 문자가 물결(~) 특수문자라고 기억해두면 팁이 되겠죠.
수행해보면, 기능 키(F1~F12)는 코드 0이 들어온 후에 매핑된 코드들이 들어오고, insert 같은 확장 키는 0xe0 값이 들어온 후에 코드가 들어오는 구조로 되어있네요.
키 조작을 하는 프로젝트를 진행할 때, UI와 같이 구현을 해놓으면, 꽤 유용한 도구가 되지 않을까 생각되네요.
반응형
'프로그래밍 언어 > C' 카테고리의 다른 글
[C언어 연습문제]강좌 16. Students Marks Sum(성별로 구분된 학생 점수의 합) (0) | 2019.04.19 |
---|---|
[C언어 연습문제]강좌 15. Calculate the Nth term(재귀 함수를 활용한 조건 계산) (0) | 2019.04.09 |
[C언어 연습문제]강좌 14. Dynamic Array in C(도서관 책장, 책 페이지 수 쿼리, 조회 프로그램) (0) | 2019.04.03 |
[C언어 연습문제]강좌 13. Digit Frequency(숫자 빈도수 구하기) (0) | 2019.03.29 |
[C언어 연습문제]강좌 12. Printing Tokens(문자열 토큰을 사용한 출력) (0) | 2019.03.26 |