본문 바로가기
C Programming/예제 프로그램

[C Console]Function Key(확장 키), 특수 키, 일반 문자 입력 코드를 받아오는 프로그램

by 희품 2019. 4. 8.
반응형

커서 이동키, 특수키의 입력은 어떻게 정의되어있을까?

키보드의 입력은 스캔 코드로 정의되어있습니다. 지금은 생소한 단어가 되어버린 스캔 코드표 대신에 직접 키를 입력받아 어떤 코드가 입력되는지 알아보는 프로그램을 실행해보는 것도 좋은 방법입니다.

 

누르는 키의 종류를 판별해서 문자, 확장키 코드를 출력하는 프로그램

아래 코드는 누르는 키의 종류를 판별해서 문자, 확장키 코드를 출력하는 프로그램입니다.

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와 같이 구현을 해놓으면, 꽤 유용한 도구가 되지 않을까 생각되네요.

반응형