윈도우에 맵핑 프로그램을 짜봤습니다.
페이지 정보
본문
제가 가진 중국산 키보드를 사용하고자 결국 여기까지 왔습니다. 제공된 앱이 원하는 기능을 제대로 구현 하지도 못하지만 찐핑이가 옆에 있을 듯한 찜찜함으로 박스에 고이 모셔두고 있었지요. 그러다 hid-remapper를 보고 다시 꺼냈지만 이건 또 키보드 두 개를 한 개로 처리 하지 못하는 문제가 있어 결국 직접 프로그램을 짜보고 싶어졌습니다.
정말 쥐어짠것 같네요. 언어도 생소하고 하나 하나 공부해가면서 하느라 시간소모도 작지 않았습니다.언어는 golang을 선택하고 github에서 샘플을 찾았습니다. user32util 이라는 프로젝트를 처음에 참고 했는데 지나고 나서 보니 실수였고 차라리 클로드 쏘넷으로 샘플 받아서 시작한게 더 도움이 되긴 했습니다.
윈도우 API중에 SetWindowsHookExW, SendInput 그리고 맵핑로직을 처리하는 callback 구현이 핵심이라 지금은 전체가 다 이해가 되지만 언어초보에게 쉽지 않았네요.
설정은 json을 이용해서 hold, mouse, tap, macro 등을 지원하게 했습니다.
"0":[{"key":"VK_RSHIFT", "hold":{"layer":1}, "tap":{"layer":2}},
{"key":"VK_CAPITAL","hold":{"vkcode":"VK_LWIN"}, "tap":{"vkcode":"VK_CAPITAL"}},
{"key":"VK_RETURN", "hold":{"vkcode":"VK_RSHIFT"},"tap":{"vkcode":"VK_RETURN"}}
{"key":"VK_4", "tap":{"vkcode":"VK_F4","mod":["alt"]}},
{"key":"VK_M", "mouse":"CLICK"},
{"key":"VK_Y", "mouse":"WHEEL_UP"},
{"key":"VK_I", "mouse":"MS_UP"},
{"key":"VK_C", "tap":{"macro":0}},
이 정도가 제가 사용하는 용도라서 지금 만족하게 사용하고 있습니다. 개발중에 가장 헷갈린 로직이 hold처리 였습니다. 단순한데 쉽진않았는 데 이유를 보니 저 hold 하나에 상태가 중첩되는 데 처음에 분리해서 생각하지 못하고 계속 조건을 달아나가는 실수를 몇번했죠ㅋ.
이제 다음에는 원래계획인 rp2040에 이식해 보는 겁니다. 지금 윈도우용 프로그램으로 잘 사용중이니 좀 시간을 가지고 도전해 봐야죠.
쓰고 보니 키보드당에 어울리지 않게 개발이야기가 되어 가네요. 그래도 읽어 주셔서 감사합니다.
모리님의 댓글
어떻게든 이해해보고 싶었습니다 ㅜ