반응형
커서 이동키, 특수키의 입력은 어떻게 정의되어있을까? |
키보드의 입력은 스캔 코드로 정의되어있습니다. 지금은 생소한 단어가 되어버린 스캔 코드표 대신에 직접 키를 입력받아 어떤 코드가 입력되는지 알아보는 프로그램을 실행해보는 것도 좋은 방법입니다.
누르는 키의 종류를 판별해서 문자, 확장키 코드를 출력하는 프로그램 |
아래 코드는 누르는 키의 종류를 판별해서 문자, 확장키 코드를 출력하는 프로그램입니다.
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 Programming > 예제 프로그램' 카테고리의 다른 글
[C Console] 윤년을 고려하여, 내일의 날짜를 출력하는 프로그램 (1) | 2019.06.03 |
---|---|
[C Console] 시그마 팩토리얼 수식 계산 프로그램(재귀, 이중 for문, 단일 for문) (0) | 2019.05.21 |
[C Console] 실수의 소수점 이하 2자리를 정수로 출력하는 프로그램 (2) | 2019.05.18 |
[C Console] 문자열을 입력받아 대문자는 소문자로, 소문자는 대문자로 변환하는 프로그램 (4) | 2019.04.24 |
[C Console] 피보나치 수열을 구하는 프로그램 (0) | 2018.12.11 |