본문 바로가기

TechLog

레지스트리 편집기로 키보드의 키 배치를 변경하기

레지스트리 편집기로 키보드의 배치를 변경하기

Windows 환경에서의 ps/2 키보드는 각각 고유의 스캔코드 맵을 가지고 있습니다. 일반 데스크탑용 103/105/106키 키보드일 경우엔 거의 표준에 부합하는 스캔코드 맵을 가지고 있지만, 노트북이라든가 미니키보드의 경우에는 특이한 스캔코드 맵을 갖고 있는 경우가 있습니다. 이럴 경우, 스캔 코드를 변경해서 특정 키가 다른 키로 인식되게 할 수 있습니다.

 

 

안녕하세요 : )

 

원래 이 글을 쓰던 시점(2004 12월이군요) Kenial TG사의 저가형 노트북을 사용하고 있었습니다. 이런저런 단점에도 불구하고 성능이나 안정성은 그럭저럭 프로그래밍 작업에 쓸 수 있을 정도였지만, 키보드 배치가 약간 애매합니다. 키보드 왼쪽 아래의 배치가 다음과 같거든요 :

 

    \ ctrl 윈도키 alt space

 

쉽 게 상상이 가실지는 모르겠습니다만.. ctrl + c,x,v가 잘 안되는 것은 물론이거니와 ctrl + alt + del까지 삑살이 나다 보니, 명랑작업은 실로 요원한 일이 되어버리고 말았습니다. 그리하여, '윈도 키 배치를 바꿔볼 수 없을까?'라는 생각이 결국 이런 내용이 되었고, 윈도우의 스캔코드 맵까정 훑어보는 아티클로 소개드려보도록 하렵니다.

 

그럼, 시작합니다 : )

 

 

스캔코드 맵

  

일 반적인 컴퓨터의 키보드(여기서는 PS/2 키보드)는 고유의 스캔코드 맵을 가지고 있으며, 각각의 키에 대응하는 스캔코드를 컴퓨터에 전달하면 해당 컴퓨터는 키 신호를 감지해서 처리하게 된다. 윈도 시스템에서는 이런 스캔코드를 윈도 메시지 형태로 변환해서 처리하며, 이 과정에서 조합 키(ctrl / shift / alt / 윈도키가 눌린 상태에서 입력되는)에 대한 처리도 수행하게 된다.

 

이러한 스캔코드 맵은 고정되어 있는 것이 보통이지만, 레지스트리를 업데이트함으로써 사용자 임의로 스캔코드 맵을 수정하는 것이 가능하다. Kenial이 사용하고 있는 레지스트리의 해당 스캔코드 맵에 대한 수정 내용은 다음과 같다 :

 

 

 

 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,56,00,00,00,00,00

 

 

 

 

 

갑자기 웬 16진수 코드의 행렬이냐, 라고 할 수도 있지만, 규칙 자체는 크게 어렵지 않다. RegEdit.exe를 실행해보도록 하자 :

 

clip_image001

Kenial이 사용중인 노트북의 레지스트리 정보

 

각 값을 자세히 살펴보면 :

    1. 00 00 00 00 값이 두 번 들어간다. (일종의 헤더라고 봐 주자)

    2. 02 00 00 00 ; 02는 스캔코드를 변환할 키의 갯수이다. Kenial의 경우 한 개의 키만 변환하고 있지만, 마지막의 00 00 00 00까지 포함해서 두 개인 것이다. 02 00 00 00이 왜 2를 나타내는 것인지 이해가 가지 않는 분은 Little Endian/Big Endian 관련 글을 찾아서 읽어보시길.

    3. 1D 00 56 00 ; 드디어 변환 코드까지 왔다. 56 -> 1D로 맵핑을 하게 되며, Kenial의 키보드에서는 56이 백슬래시(\)에 대한 바이오스 코드이며, 1D는 왼쪽 Ctrl이 된다. (자세한 내용은 위의 Keyboard Scan Code Specification KeyboardTest 프로그램을 참고해보도록 하자) 마찬가지로, 1D 1D 00 으로 표현되어 있으며, 이는 2. 의 경우와 마찬가지로, x86 기반 CPU Little Endian 바이트 순서를 사용하기 때문이다.

    4. 00 00 00 00 ; 스캔코드 맵의 마지막을 알리는 코드

 

clip_image002

KeyboardTest 프로그램, 각 키의 키 코드를 확인할 수 있다.

 

위와 같이 레지스트리를 고친 후에 시스템을 리부팅하면 해당 키의 스캔코드 값이 바뀌게 된다. xp 2003의 경우에는 로그오프한 후 다시 로그온하는 것 만으로 해당 설정이 적용된다. (2k에서는 테스트해보지 못했음)

 

 

참고

    Key Support, Keyboard Scan Codes, and Windows(Keyboard Scan Code Specification은 꼭 읽어보도록 하자)

    http://www.microsoft.com/whdc/device/input/Scancode.mspx

 

    KeyboardTest. 키보드의 키 코드를 확인할 수 있는 프로그램.

    http://www.passmark.com/download/index.htm

    

 

정리

 

' 키 배치를 바꿔보자'라는 내용을 가지고 스캔코드 맵도 나오고.. 약간은 어지러운 글이 되었습니다만, 위 페이지의 스캔코드 관련 글들을 훑어보시면 언젠가는 피와 살이 되는 내용이라고 믿어 의심치 않습니다. 영문의 압박을 이겨내고 꼭 한번쯤은 읽어보시길 바랍니다 : )

 

그럼 : )