맥용 키보드를 Windows 에서 사용하기 위한 키보드 배열 수정

어쩌다보니 iMac + Mojave + Bootcamp + Windows 10 1809 를 사용하게 되었습니다.
맥용 키보드와 Windows용 키보드의 배열이 달라서 조금 불편함이 있습니다.
참고로 BS는 NumPad가 있는 애플 정품 키보드를 사용 중입니다.

일단 BS는 취미로 각종 개발툴을 사용하는데 여기에서 자주 쓰이는 단축키인 Shift + Space 를 버릴 수 없습니다.
따라서 Windows 의 101A 타입으로 키배열을 설정했습니다.
101A 타입은 우측 Alt 키를 한/영 전환키로, 우측 Ctrl 키를 한자키로 사용합니다.

macOS는 Command 키를 자주 사용하고 기본 한/영 전환이 CapsLock 또는 Shift + Space에 바인딩 되어 있습니다.
Windows는 Ctrl, Alt 키를 자주 사용합니다. 그리고 101A에서 우측 Alt가 한영 전환입니다.
사용해보면 Left Alt와 Right Alt(한영)을 사용할 때 엄지 손가락으로 누르기가 굉장히 불편합니다.

그리고 Print Screen, Scroll Lock, Pause, Insert, NumLock 은 보이지도 않습니다.

우선 Windows를 Bootcamp로 설치하고 나서 드라이버 설치가 끝난 상태면
Bootcamp를 통해서 F1 ~ F12 의 키를 멀티미디어 키가 아닌 Function키로 설정할 수 있습니다.

이렇게 하고 나면

F14 (Home 키 위에 위치) -> Print Screen
F15 (PageUp 키 위에 위치) -> Scroll Lock
F16 (NumPad의 Clear 키 위에 위치) -> Pause
fn (Home 키 왼쪽에 위치) + return -> Insert

이렇게 해서 사용할 수 있게 됩니다. 여전히 Windows용 키의 Application 키(마우스 우클릭 했을 때 메뉴가 나오게 하는 키)가 없습니다.

BS는 여기에서 약간의 배열 변경을 추가하였습니다.

왼쪽 Command -> 왼쪽 Alt
왼쪽 Alt -> 왼쪽 Win
오른쪽 Command -> 한/영 (101A의 오른쪽 Alt)
오른쪽 Alt -> Application 키
F13 (fn 위에 위치) -> Insert 키

fn키는 별도의 스캔코드를 가지지 않는 하드웨어 키 조합용으로 사용할 수 없습니다. ㅜㅜ

이렇게 해서 최대한 Windows용 키보드 배열과 유사하게 수정해서 사용 중입니다.
마우스도 바꿨습니다. 원버튼뿐인 맥용 매직 마우스는 봉인하고 유사?한 디자인의 APOINT M302 화이트로…

이제 좀 Windows 답게 사용할 수 있네요.

… 이제 본론 입니다.

키보드 배열을 바꾸기 위한 레지스트리(Registry) 편집
(잘 모르면 시도하지 마세요. 까닥 잘못하면 키보드 입력이 안되어 문제가 될 수 있습니다.)

키 위치: HKLM/SYSTEM/CurrentControlSet/Control/Keyboard Layout
값 이름: Scancode Map
값 타입: 이진값(Binary)

입력은 보통 8바이트 단위로 줄바꿈이 되는데 설명을 위해 4바이트 단위로 잘랐습니다.

00 00 00 00 처음 8 바이트는 무조건 0
00 00 00 00
06 00 00 00 5개의 배열을 지정하기 위해 6 (5 + 1) 입력
38 00 5b e0 E0_5B(Left Command) -> 00_38(Left Alt)
5b e0 38 00 00_38(Left Option) -> E0_5B(Left Win)
38 e0 5c e0 E0_5C(Left Command) -> E0_38(Right Alt, 한영)
5d e0 38 e0 E0_38(Right Option) -> E0_5D(Application)
52 e0 64 00 00_64(F13) -> E0_52(Insert)
00 00 00 00 마지막 4 바이트는 무조건 0

원래대로 돌리고 싶으면 해당 값을 지우면 됩니다.
변경 후에는 Reboot이 필요합니다.

만약 다중 사용자 환경에서 본인만 바꿔서 사용하고 싶으면 키보드 후킹을 구현하거나, AutoHotkey와 같은 유틸리티를 사용하는 것을 권장합니다.

그리고 마지막 보너스
키보드의 스캔 코드를 구하는 간단한 소스입니다.
핵심은 “RegisterRawInputDevices()으로 등록하고, GetRawInputData() 으로 가져온다” 입니다.
.NetFramework 4를 지정해서 빌드한 Release 파일도 포함되어 있습니다.