안녕하십니까. 신입회원입니다.

이번에 레오폴드 700r로 기계식입문을 하였습니다.


키보드 테스트겸 scancode map을 바꾸려하니 둘다 되는 마땅한 툴이 안보여서 만들어보았습니다.

img.png


목표는 다음과 같습니다.

  1. 키보드의 scancode및 virtual key의 확인
  2. 키보드의 레이아웃의 지정
  3. Scancode map의 수정
  4. Application command의 사용자 지정

입니다.

참고한 프로그램은 AquaKeyTest입니다.


구성은 다음과 같습니다.

  1. TLKeyboardMap.exe : 실행파일 c# .net 3.5입니다. win7이면 기본설치되어있습니다.
  2. Layout.xml : 설정파일입니다. scancode의 정보및 layout정보를 가지고 있습니다. 사용자가 layout추가가 가능합니다.



동작방법


 프로그램실행후 키를 눌려보시면 눌려진키는 밝은 노란, 한번이라도 눌러졌던키는 회색, 아직 안눌러본키는 주황입니다.(동작방식은 AquaKeyTest와 동일합니다.)

하단에 키의 정보가 표기됩니다. scancode(lParam)와 해당하는 virtual key(wParam)이 출력됩니다.



메뉴설명

  • Layouts : 레이아웃을 변경.
  • Clear : 눌러진키정보를 초기화
  • Reload : Layout.xml를 수정하였을경우 불러와서 적용
  • Scancode Map : 키보드 맵변경용 레지스트리 조작(팝업창이 뜹니다.)
  • App Command : 어플리케이션 키의 동작형태를 조작(팝업창이 뜹니다.)
  • Config : 사용자설정(현재 키캡의 색상조정이 가능합니다. 팝업창)




map의 변경방법


다음과 같습니다. (왼쪽 한자키를 왼쪽 alt키로 바꾸는것입니다.)

  1. Scancode Map을 눌러 팝업을 띄운다.
  2. 맵에서 왼쪽 한자키를 드래그해서 팝업창의 "To    From"글자 아래의 빈공간에 드랍한다.
    (scancode가 적힌 네모박스가 하나생기면서  From쪽으로 붙습니다.)
  3. 맵에서 왼편 알트키를 드래그해서 팝업창의 "To    From"글자 아래의 빈공간에 드랍한다.
    (scancode가 적힌 네모박스가 하나생기면서  To쪽으로 붙습니다.)
  4. "설정값을 설명"을 눌러 원하는 대로 설정이되었는지 확인합니다.
  5. "설정값을 적용하기"를 눌러 레지스트리에 기록합니다.
  6. 윈도우를 재시작하시면 적용이됩니다.

2,3번에서 순서가 중요하지 위치는 상관없습니다.
다른키도 바꾸실경우 2,3번을 반복하시면됩니다.

한번 드랍한 내용은 드래그로 위치 이동이 가능하고, 드래그해서 옆의 설명창쪽에 버리면 삭제도 됩니다.


scancode Map창의 버튼은 다음과 같은 역활을 합니다.

  • "Scancode Map을 삭제" : 레지스트리에 정의된 키를 지웁니다.
  • "Scancode Map을 불러오기" : 레지스트리의 내용을 읽어서 설정값에 넣습니다.
  • "설정값을 설명" : 드래그&드랍으로 추가한 키를 설명을 붙여서 보여줍니다.
  • "설정값을 파일로 저장" : .reg 파일로 저장시켜줍니다.
  • "설정값을 적용하기" : 레지스트리에 바로 기록합니다.


멀티미디어 키등도 map되도록작업하려 했으나 그런 키보드를 가진게 없어서...OTL...

그리고 USB키보드는 멀티미디어키들이 scancode를 가지고 있지 않고 virtual key만 가지고 있는것 같더군요.(좀더 명확히 알아봐야할것같습니다.)

scancode를 가지고 있지않으면 map에서 고칠수가 없지요. ps2로 연결하면 가지는것같습니다.




레이아웃 추가


현재 레이아웃으로 한글106키(멀티미디어 없고 enter가 큰것과 작은것)와 700R, 마제1, 전체키가 모양없이 정열된것이 있습니다.

자신의 키보드의 모양대로 하시려면 Layout.xml에 주석을 참고로 추가하시면됩니다.(xml은 알고 있으셔야합니다.)




Application command


Application command의 사용자 설정기능입니다.

어플리케이션 키라는것은 키보드에 홈(브라우져가뜬다),메일(아웃룩이뜬다), 내컴퓨터(탐색기가뜬다), 볼륨조절 등등의 키입니다.

이것들을 사용자가 원하는 프로그램및 동작으로 바꾸는것입니다.

메뉴의 AppCommand를 누르시면 다음과 같은 팝업이 뜹니다.

img2.png

위의 예제는 메일키를 누르면 mp3용 프로그램이 뜨고 홈키를 누르면 노트패드가 뜨도록 설정한것입니다.

  • 추가 : 설정하는 칸을 하나더 만듭니다.
  • 현재값 파일로 저장 : 현재레지스트리의 값을 reg파일로 저장합니다.(화면에 보이는값이아닙니다.)
  • 적용 : 현재 설정값을 적용합니다.(부팅필요없이 바로 적용됩니다.)
  • X : 설정한것을 지울때 사용합니다. 혹은 목록에서 가장처음의 NONE을 선택해도 됩니다.

첫칸은 어플리케이션 키의 종류들인데 모두다 동작하지는 않습니다.(볼륨조절같은것들은 동작안합니다. 오히려 동작하는게 더 적을 겁니다.)

두번째칸은 2가지 실행형태를 나타냅니다.

  • Association : .mp3처럼 확장자를 적습니다. 그러면 해당 확장자와 연결된 프로그램이 실행됩니다. mailto는 메일프로그램, http는 브라우져가 뜹니다.
  • ShellExcute : 일반적인 프로그램을 실행합니다. 애매하시면 전체경로를 적으시고 공백주의해주세요.



특이한 키들


  • 한영, 한자키는 Down이벤트만 있고 up이 없습니다.(가끔씩 처음누를때 다운없이 업이 한번 나올경우는 있더군요)
  • FN키를 재정의하거나 다른키를 FN키로 만들수 없습니다.(하드웨어키. 신호자체가 안올라옴)
  • pause break를 재정의하거나 다른키를 pause break키로 만들수없습니다.(확인필요.)
  • Num Lock은 올라오는 code와 map에 설정하는 코드가 다릅니다.(map에 설정할때 pause break값으로 설정해야 동작합니다. map에 드랍시 알아서 변환됩니다. 코드는 같고 확장이 True/False의 차이만있는데 왜그런지 스팩상의 이유를 못찾아봤네요.)



버그나 요구사항같은것도 댓글로 적어주시면 반영하도록 노력해보겠습니다.


툴들을 팁&태크 게시판에 올리시는것같아서 허접하나마 올려봅니다.


참고로 shift+space로 한영전환하는것은 http://jwmx.tistory.com/1647 의 jwShiftSpaceKey라는 프로그램이 좋습니다.

이거랑 scancode map이면 굳이 type 3번으로 키보드 드라이버를 안바꿔도 되지요. 더 좋은점들도 있고요.


테스트한 환경은 다음과 같습니다.

  • win7 32/64 한글판
  • 키보드셋팅은 type 1로만
  • 마제1, 700r, 아이락스 6310, 큰글씨 한글키보드
  • usb연결만 테스트해봄.


12-11-19: 수정사항

  • 레오폴드 700r의 레이아웃이 틀렸더군요. 이건 한영/한자키가 없죠.
  • 한영한자키를 레지스트리에 설정할때 적용이 안되던 버그를 수정하였습니다.
    이유가 한영(E0F2,0072)/한자(E0F1,0071)키가 하드웨어적으로 특별한 키입니다. down만 있고 up도 없고 press도 없습니다.
    그리고 기본적으로 발생하는 값은 F1/F2인데 설정시는 -80을해서 71/72로 설정해야합니다.
    참고자료 : http://ko.wikipedia.org/wiki/%EC%96%B8%EC%96%B4_%EC%9E%85%EB%A0%A5_%ED%82%A4

12-11-19: 수정사항2

  • 마제닌자1, 한글106키 enter작은것 레이아웃을 추가하였습니다.
  • 어플리케이션키에 다른 프로그램을 할당하는 기능을 추가하였습니다. 설명은 본문에 추가하였습니다.
  • 적혀있는 말들이 코드에있는걸 그대로 써서 일반유저가 알아먹기 힘든말들이 많네요.. 나중에 좀더 쉬운말로 바꿔보지요.

12-11-20: 수정사항

  • alt,F10키를 눌렀을경우 메뉴로 포커스가 이동해서 키입력이 정상적이지 않던 버그 수정 :SkyEyes님 제보감사.

12-11-20: 수정사항2

  • 키보트 체크방법변경
    • 기존 : MessageFilter
    • 변경 : 전역 hook
    • 어지간한 상황에서도 키 입력을 받도록 변경하였습니다.(F10으로 메뉴가 떠있어도 입력을 받고 PrintScr키도 down/up 다 받습니다. 심지어 다른프로그램에 포커스가 가도 받습니다.)
  • 사용자가 색상을 지정하는 옵션추가
    • 툴바의 오른편 config를 누르면 UI에서 바꿀수 있습니다.

12-11-21:수정사항

  • 특이한키들에 대한 처리가 추가되었습니다. 본문참조.

12-12-11 : 변경사항

  • 일반키에 멀티미디어 키를 배치하는 기능추가(빨간풍차님 요구사항)
    • 배치하는건 기존과 동일합니다. 드래그&드롭
    • 일단 기본 106키의 layou하단에만 멀티미디어키들을 배치하였습니다.
    • 테스트 결과는 아래내용 참조
  • 버그수정 및 잡다 패치
    • 키보드 1~6까지의 키캡글자가 다른것으로 찍히던것을 수정
    • scancode설정시 정상동작후 정상동작되었다는 메세지 창 추가
    • scancode설정값 초기화버튼추가
    • Reload시 scancode의 변경값도 적용되도록 변경   
    • 너무 믿믿하여 아이콘 추가;;;