자료실
안녕하십니까. 신입회원입니다.
이번에 레오폴드 700r로 기계식입문을 하였습니다.
키보드 테스트겸 scancode map을 바꾸려하니 둘다 되는 마땅한 툴이 안보여서 만들어보았습니다.
목표는 다음과 같습니다.
- 키보드의 scancode및 virtual key의 확인
- 키보드의 레이아웃의 지정
- Scancode map의 수정
- Application command의 사용자 지정
입니다.
참고한 프로그램은 AquaKeyTest입니다.
구성은 다음과 같습니다.
- TLKeyboardMap.exe : 실행파일 c# .net 3.5입니다. win7이면 기본설치되어있습니다.
- Layout.xml : 설정파일입니다. scancode의 정보및 layout정보를 가지고 있습니다. 사용자가 layout추가가 가능합니다.
동작방법
프로그램실행후 키를 눌려보시면 눌려진키는 밝은 노란, 한번이라도 눌러졌던키는 회색, 아직 안눌러본키는 주황입니다.(동작방식은 AquaKeyTest와 동일합니다.)
하단에 키의 정보가 표기됩니다. scancode(lParam)와 해당하는 virtual key(wParam)이 출력됩니다.
메뉴설명
- Layouts : 레이아웃을 변경.
- Clear : 눌러진키정보를 초기화
- Reload : Layout.xml를 수정하였을경우 불러와서 적용
- Scancode Map : 키보드 맵변경용 레지스트리 조작(팝업창이 뜹니다.)
- App Command : 어플리케이션 키의 동작형태를 조작(팝업창이 뜹니다.)
- Config : 사용자설정(현재 키캡의 색상조정이 가능합니다. 팝업창)
map의 변경방법
다음과 같습니다. (왼쪽 한자키를 왼쪽 alt키로 바꾸는것입니다.)
- Scancode Map을 눌러 팝업을 띄운다.
- 맵에서 왼쪽 한자키를 드래그해서 팝업창의 "To From"글자 아래의 빈공간에 드랍한다.
(scancode가 적힌 네모박스가 하나생기면서 From쪽으로 붙습니다.)- 맵에서 왼편 알트키를 드래그해서 팝업창의 "To From"글자 아래의 빈공간에 드랍한다.
(scancode가 적힌 네모박스가 하나생기면서 To쪽으로 붙습니다.)- "설정값을 설명"을 눌러 원하는 대로 설정이되었는지 확인합니다.
- "설정값을 적용하기"를 눌러 레지스트리에 기록합니다.
- 윈도우를 재시작하시면 적용이됩니다.
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를 누르시면 다음과 같은 팝업이 뜹니다.
위의 예제는 메일키를 누르면 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의 변경값도 적용되도록 변경
- 너무 믿믿하여 아이콘 추가;;;
좋은 툴이 있어도 저는 이해를 못하는 수준의 초심자라 슬프네요. ㅠㅠ
700r 레이아웃으로 해놓고 포커로 fn키 누르면 스캔코드가 안나오는데 그럼 위치 바꾸는 것 자체가 불가능한 거겠죠.
마음같아선 Fn키와 Rwin을 바꾸고,바뀐 Rwin을 한/영 변환으로 변경했으면 하는데 그런건 불가능한가요?
일단 추천~~~~~~~
추천 한 방 날렸습니다.
궁금한 것이 있는데요.. AutoHotkey라는 리매핑 프로그램이 있는데요, 이거로 리매핑해 놓으면 키 값을 잡지 못하네요.. AquaKeyTest는 오토핫키 리매핑을 싹 무시하고 키 값을 잘 잡았습니다. 프로그램은 잘 모르지만.. 그 어떤 건드리는 깊이가 달라서 그런가요 ? 이것이 양쪽 윈키나 좌측 얼트키 작동을 억누르지 못하는 것과도 관련이 있는 것으로 생각하는데.. 전 그런거 잘 모르니까, 그냥 추측만.. (시간 나시면.. F10 키하고 프린트 스크린 키도 한 번 점검해 주세요. 제 키보드/컴퓨터가 문제인지 좀 이상하게 작동합니다 ^^).
오토핫키는 리맵핑이라기보다는 매크로지요. 그런데 키 이벤트를 어느수준에서 받는지 모르겠습니다. 몇년전에 게임하다가 써본이후로 안써봐서요;;
이 프로그램은 키보드 훅킹을 사용하지않고 자신의 프로세스로 전달되는 이벤트만으로 판단합니다.
그래서 다른프로그램이 전역 훅킹을 걸어서 키를 바꾸면 바뀐 키로 판단을 할겁니다.
좀더 명확하 하려면 이프로그램도 전역훅을 쓰거나(이럴경우 먼저 오토핫키가 훅을 처리해버리면 똑같겠지만)
더 아래단으로 가서 드라이버단으로 가야하는데 aquakey와 다르게 나온다면 아마도 아쿠아키는 전역훅을 걸어서 쓰나보네요.
키보드 이벤트는 실제물리적인키보드->드라이버->키훅체인(아마도 아쿠아키나 오토핫키)->해당프로그램(제껀여기서처리.시스템에 뭔가 거는걸 싫어해서) 순으로 전달됩니다.
1) 가능하시면 이상하게 동작되는 스크린샷을 첨부해주시면 쉽게 분석이되겠습니다.
키의 하단에 나오는 코드들을 봐야지 알수가 있거든요.(F10누르고 스샷한방, 프린트스크린 누르고 스샷한방)
이런식으로 44 E:0, 37 E:1 이 나오면 정상입니다.
2) 오토핫키에서 어떤코드로 리맵핑하셨는지요? 코드를 알려주시면 테스트를 해보지요.
F10키는 원인을 알것같습니다. F10키를 누르면 아이콘쪽으로 포커스가 이동합니다.
보통 alt키누르면 메뉴로 포커스가 이동하는거랑 같은겁니다.
F10누른후 방향키 내려보시면 메뉴가 그제서야 보일겁니다. 가뿐하게 F10한번 더 누르시거나 ESC한번 누르시면 다시 포커스가 원상복귀가 됩니다.
프린트스크린도 아마도 F10을 눌러서 포커스가 이동된상태에서 눌러서 그런것같습니다. 포커스가 아이콘쪽 메뉴에 가있을경우 여러가지 키를 누르다보면 에러소리(띵! 아는 윈도우음)이나면서 포커스가 다시 원상복귀되는걸 알수있을겁니다.
다음버전에 F10으로 포커스가 이동이 되지 않도록 바꿔놓겠습니다.
아, 친절하고 상세한 답변 감사..
명칭은 잘 몰라요, 리맵핑인지 매크론지 그런거는 영 몰라요.. 하여간 그런 모르는 말 나오면 더 공부하면 되니까 좋아요.. 그게 그래요, 아쿠아키테스트가 제일 강하고, FlexMatrixTester 얘가 그 다음으로 제법 쓸만하고, FREEONTester 얘가 그 다음 그리고 기타 등등... 하여간, 아쿠아키테스트라는 프로그램이 제일 속지 않는 데, 그렇다고 레지스트리에 뭘 등록하거나 설정/설치 하거나 그런 이상한 행동을 하는 것 같지는 않은데 말이죠..
네, F10 키가 이상한 행동을 할 때는 Esc 키로 한 번 털면 괜찮은 것 맞습니다(매트릭스 따는 도중에 한 번 털려면 쉽지 않을 듯).
프린트 스트린 키의 이상한 행동이라는 것은 아무리 눌러도 색깔이 바뀌지 않는다는 점이고요.. ^^
오토핫키 시험은 간단하게만 해 보았습니다. 예를 들면..
a:: c
이렇게 해 놓으면 a 키를 전혀 잡지 못하고, 완전히 c 키로만 인식합니다. 그리고, 이렇게 하면..
b:: Soundbeep
키 값은 잘 인식하는 데, 색깔 표시가 그냥 한 번 회색으로 되고, 노란색으로는 표시 못 해줍니다.
수고하세요..
(덧) F10, 좌ALT 약간 수정 하셨네요.. 고생 많으십니다... (글씨 색깔 회색 말고, 검은 색으로 하시면 안 될까요 ? 흐릿해서리...)
리얼포스 106키 사용중입니다. 한자키-> R콘트롤, R-콘트롤 -> 한자키 로 수정하고자 프로그램에서 수정했는데
한자키-> R콘트롤 전혀 수정이 안먹습니다. 해당 프로그램에서는 제대로 바뀐걸로 인지합니다. 다른 수정은 인지합니다.
그런데 나와보면 다른 프로그램에선 그렇게 인지를 못하네요. ㅠ.ㅜ 왜 그럴까요?
한자키로 컨트롤+V, 컨트롤+C 사용하고 싶었거든요..
그리고.. 혹시 key tweak처럼 사용안할 키 지정, 일반키에 어플리케이션 키 지정 이런거 안될까요?
일반 키보드에서는 계산기,인터넷이나 키같은게 없는데 일반키에 지정될 수 있으면 좋을 것 같습니다.^^일단 한자키문제에 대해서 답변드리겠습니다.
스캔코드의 적용은 정상적이실겁니다. 눌러서 테스트해보시면 키를 누를때(key down)는 정상인식합니다만 땔때(key up) 신호가 안나올겁니다. (아마도 press도 정상 발생하지 않을걸로 생각됩니다.)
그래서 프로그램이 어떤이벤트에서 키보드 입력을 처리하는가에 따라 동작할수도 있고 안할수도 있습니다.
본문에 특이한 키에 대해서 적어놓은부분이 있습니다.
한자키도 그중에 하나임으로 프로그램에 따라 정상동작하지 않을 가능성이 매우 높습니다.
두번째 의견은 멀티미디어 키가 어떤것이 있는지 확인해보고 추가해보겠습니다.
한문, 한글 키 신호를 특이하게 만든 것은 좀 고쳐졌으면 좋겠습니다. 브레이크 신호를 왜 안 내보내는지 이해가 안 갑니다. 연타를 막겠다는 의도로 추측만되는데.. 연타가 그 무슨 문제라고 그랬는지 이해가 안 갑니다. 시간이 너무 많이 흘렀는가요 ? 아니면, 표준이므로 반드시 따라야 하는가요.. 좌우간 일반 키와 다름없이 신호 좀 내보낼 수 있도록 컨트롤러 프로그램 수정하려면, 어디에 누구한테 어떻게 하소연을 해야 하는지요..... 이것만 고쳐지면 106배열 아무런 거리낌없이 살 것입니다. (일본어 카나 키도 그런가요 ? ... 안 그럴껄요... 일본어 배열에서 그런 불편함이 있어서 키매핑이 불가능했다는 소리는 아직 못 들었습니다.)
어...작성자가 저인데 추천글로 가더니 수정권한이 없어져버렸네요.
어쩔수없이 댓글로 변경사항및 파일첨부합니다.
12-12-11 : 변경사항
- 일반키에 멀티미디어 키를 배치하는 기능추가(빨간풍차님 요구사항)
- 배치하는건 기존과 동일합니다. 드래그&드롭
- 일단 기본 106키의 layou하단에만 멀티미디어키들을 배치하였습니다.
- 테스트 결과는 아래내용 참조
- 버그수정 및 잡다 패치
- 키보드 1~6까지의 키캡글자가 다른것으로 찍히던것을 수정
- scancode설정시 정상동작후 정상동작되었다는 메세지 창 추가
- scancode설정값 초기화버튼추가
- Reload시 scancode의 변경값도 적용되도록 변경
- 너무 믿믿하여 아이콘 추가;;;
멀티미디어키 테스트 결과
와... 능력자이십니다. ^^;
좋은 툴을 힘들게 만드셨을텐데... 이렇게 공유해주셔서 많은 유저들이 혜택을 볼 수 있을 것 같아요.
추천 찍고 갑니다. ^^;