0. 키맵핑의 필요성
우리가 키보드를 기존 배열대로 잘 사용하고 있지만, 가만히 생각해보면 기존 배열이 가장 편한 배열은 아닙니다.
그래서 어떤 분들은 키맵핑을 다시 해서 사용하십니다.
기존 배열에서 불편할 수 있는 배열 몇 가지만 생각해보자면,
첫 번째로 Capslock을 생각해볼 수 있습니다.
Capslock은 상당히 누르기 편리한 위치에 있습니다. 그러나 Capslock키는 생각보다 많이 사용되지 않습니다. 문장 전체를 대문자로 쓸 일은 많지 않기 때문에 대문자를 입력할 때 일반적으로 Shift + 영문자 입력을 쓸 일이 많지요.
그래서 해피해킹 키보드는 아예 Capslock 위치에 자주 쓰는 Ctrl을 넣어두고 원래의 Ctrl 위치를 비워두었습니다.
또 어떤 키보드들은 Capslock과 Ctrl을 바꿀 수 있는 스위치를 제공하기도 합니다.
(Capslock을 Ctrl로 바꿔 사용하시는 분들은 이게 얼마나 편리한지 아실 겁니다^^)
두 번째로 backspace를 생각해볼 수 있습니다.
backspace키도 상당히 자주 쓰이는데 보통 타이핑하는 손가락의 위치와 멀어서 불편합니다.
그래서 어떤 분들은 해피해킹처럼 Backspace 밑의 위치 (보통 키보드의 \ 위치) 에 backspace가 있는 걸 선호하기도 하고,
capslock 위치에 backspace를 맵핑해서 사용하기도 합니다.
1. 왜 AutoHotKey인가?
저는 지금 AutoHotKey로 키맵핑을 해서 키보드를 사용하고 있습니다.
몇 가지 키맵핑 스크립트를 공유하려고 글을 남깁니다.
그런데 왜 굳이 AutoHotKey여야 하는가에 대한 의문이 있으실 겁니다.
저는 처음에 키보드에 있는 딥스위치를 이용해서 (레오폴드 fc660m 입니다) Ctrl과 Capslock을 변경하는 수준의 키맵핑만 했습니다.
하지만 이 방법의 단점은, 지금 제가 노트북에 이 키보드를 연결해서 사용하고 있고, 가끔은 무선 블루투스 키보드도 사용을 하는데,
딥스위치를 이용한 키맵핑은 그 키보드에만 해당되기 때문에 노트북 키보드와 블루투스 키보드를 사용할 때 큰 혼란과 불편함이 있다는 것입니다.
두 번째 시도해봤던 프로그램이 SharpKeys였습니다. SharpKeys는 윈도우의 레지스터를 건드려서 키를 다시 맵핑해주는 프로그램입니다. 하지만 이 프로그램의 단점은, 레지스트리를 건드린다는 부담과, 여러 키의 조합은 맵핑할 수 없다는 불편함입니다.
그래서 마지막으로 시도해서 지금까지 사용 중인 프로그램이 AutoHotKey입니다.
이 프로그램의 장점은,
1) 스크립트를 읽어들여 구동하기 때문에 레지스트리를 변경하지 않는다는 것과,
2) 따라서 스크립트를 수정하거나 다른 스크립트를 읽어들여도 재부팅이 필요 없으며,
3) 다양한 맵핑 (여러 키의 조합 및 마우스 조작까지도) 가능하다는 것입니다.
단점은 스크립트를 작성하는 방법이 꽤나 어렵다는 것인데, 그래서 제가 이리저리 검색하여 유용하게 사용하고 있는 몇 가지의 스크립트를 공유하려고 합니다.
2. AutoHotKey 설치 및 스크립트 작성
AutoHotKey 프로그램은 https://autohotkey.com/ 에서 다운로드받으실 수 있습니다.
32/64 bit 인스톨러도 있고 무설치버전도 있는데, 키맵핑 스크립트를 시작프로그램에 등록하여 시스템 시작시부터 사용하려면 무설치버전보다 설치버전을 추천합니다. 프로그램이 참 가벼워서 설치해도 큰 부담이 없을 것입니다.
그리고 스크립트 작성은 그냥 메모장을 열어서 확장자를 .ahk 로 해주면 끝납니다. 그리고 이 스크립트를 실행하면 자동적으로 로딩됩니다. (그리고 시작프로그램에 이 스크립트 파일을 넣어주면 시스템 시작시 자동으로 로딩됩니다. )
3. 스크립트 공유
제가 사용하는 스크립트입니다.
#InstallKeybdHook
Capslock::
Send {LControl Down}
KeyWait, CapsLock
Send {LControl Up}
if ( A_PriorKey = "CapsLock" )
{
Send {Backspace}
}
return
; Shift + Ctrl 단축키 위한 스크립트
+CapsLock::+Ctrl
Return
; Ctrl + CapsLock 토글 방지
^CapsLock::Ctrl
Return
; Always on Top
^SPACE:: Winset, Alwaysontop, , A ; ctrl + space
Return
; \키를 backspace로
\::Backspace
Return
; 윈도우키 + \ 키로 \ 입력
#\::\
Return
; 마우스 클릭
#LAlt::
MouseClick
return
; 마우스 우클릭
#space::MouseClick, right
return
(보시다시피 ; 이후에 있는 건 스크립트로 띄워지지 않는 설명구입니다)
스크립트 설명 들어갑니다. 필요한 것만 복사해서 쓰시면 되겠습니다.
#InstallKeybdHook
Capslock::
Send {LControl Down}
KeyWait, CapsLock
Send {LControl Up}
if ( A_PriorKey = "CapsLock" )
{
Send {Backspace}
}
return
보통 Ctrl과 Capslock을 많이 바꿔서 쓰시는데, 이건 거기서 한 단계 더 나아간 스크립트입니다.
Capslock이 눌린 상태로 문자가 입력되면 Ctrl 단축키로 작동하고,
Capslock이 눌린 상태로 문자입력 없이 다시 들려지면 backspace로 작동합니다.
Capslock으로 ctrl과 backspace를 동시에 쓸 수 있는, 굉장히 유용한 스크립트입니다.
(물론 capslock이 올라갈 때 backspace 입력이 되기 때문에 backspace의 연속입력은 안 됩니다.)
Capslock 토글은 윈도우키, Ctrl, Alt 중 하나의 키와 Capslock 키를 누르면 됩니다.
그리고 원래 Ctrl은 그대로 Ctrl로 작동합니다. 가끔은 원래의 Ctrl 위치가 편해서 그냥 남겨두었습니다.
; Shift + Ctrl 단축키 위한 스크립트
+CapsLock::+Ctrl
Return
Ctrl과 Shift 단축키 (예를 들어 Ctrl + Shift + Z) 가 제대로 작동할 수 있도록 해주는 스크립트입니다.
; Ctrl + CapsLock 토글 방지
^CapsLock::Ctrl
Return
Ctrl + Capslock으로 의도하지 않게 캡스락 토글이 될 때가 많아서 Ctrl + Capslock은 그냥 Ctrl로 인식되도록 하는 스크립트를 추가했습니다.
; Always on Top
^SPACE:: Winset, Alwaysontop, , A ; ctrl + space
Return
명령어를 전부 sendinput으로 바꿀 필요 없이 최상단에 다음과 같이 추가해주시면 됩니다.
SendMode Input
또, +CapsLock::+Ctrl 와 같이 한줄로 끝난다면 return문은 생략하셔도 괜찮습니다.
핫키 지정시 앞에 $를 붙인다면 조합키에선 hotkey가 작동하지 않습니다.
sendinput은 send와 어떤 차이가 있나요?
(그리고 지금 스크립트 상으로는... Capslock + 마우스 클릭 및 휠 작동은 Ctrl로 인식 안 되는데 가능한 방법 혹시 아시는지요...?^^)
키훅 아래 #InstallMouseHook 를 추가해보시기 바랍니다.
send 모드로 긴 문자열을 보내면 아시겠지만 기본 타이핑 속도가 늦습니다. 오토핫키에 기본 설정된 속도로 작동하는데 이를 변경 할 순 있지만 input 명령어가 있는 이상 그렇게 할 필요는 없겠지요.
아 그리고 저도 작성자님처럼 키매핑할 요량으로 오토핫키를 쓰다보니 조금 주워 들은게 있을 뿐입니다. ^^;
그런데 키훅 아래 #InstallMouseHook을 추가해도 A_PriorKey에 마우스기록이 잡히지 않는 건 여전하네요 ㅠㅠ
추가로 제가 사용하는 조합키 몇개 추천해봅니다.
;----------------------------------------------------------------------------------------
$^!WheelUp::SoundSet +10 ; 콘트롤 + 알트 + 휠업 으로 볼륨 10만큼 높이기
$^!WheelDown::SoundSet -10 ; 볼륨 낮추기
; // 특정 창에만 작동하는 단축키 아래는 'CabinetWClass' 탐색기에서만 작동
#IfWinActive ahk_class CabinetWClass ; GroupAdd 명령어로 그루핑 가능
$MButton::!F4 ; 탐색기에서 휠버튼 클릭시 창닫기
#IfWinActive
; // 자동치환
:*:abc@::abcdef@email.com ; abc@라고 입력하면 뒤에 지정된 'abcdef@email.com'로 문자가 치환됨.
#KeyHistory 40 추가해서 리로드했는데.... 잘 안 되네요 ㅠㅠ
이게... capslock을 조금 빠르게 들어올리면 작동을 하는데, 일반적인 환경에서는 평소처럼 됩니다.. 어렵네요 ㅠㅠㅎㅎ
#CLiOS
저는 ctrl y 도 되고 ctrl f4도 되고요. 새끼로 ctrl을 누르면 ctrl y 는 어지간히 손가락 긴 사람만 가능하겠지만 저는 타이핑 치다가 거의 즉시 (약간만 천천히 누르면, 손가락이 약간 짧아서) ctrl y 도 가능하거든요.
ctrl c v 같은 경우는 왼쪽으로 살짝 손을 틀어서 날쪽으로 누르면 평상시 다른 글자들을 타이핑 하듯이 이어서 누르게 됩니다. 손 자세가 옆으로 기울기만 했을 뿐 자세가 전혀 안 변하다보니 힘 안들이고 순식간에 누를 수 있어요.
손모양이나 손바닥 크기 때문에 안되시는 분들도 있겠죠.
한번 잘써보겠습니다-!
문제점이 하나 있는데 브라우저나 탐색기등에서 CTRL + 휠 로 줌인/줌아웃을 하는걸
핫키 적용시켜서 CapsLock + 휠 로 작동시키면 확대/축소 후에 CapsLock이 들리는걸 백스페이스
로 인식해서 "뒤로가기" 가 됩니다. 해결방법은 없을까요?
그래서 마우스 휠이나 버튼을 사용할 때는 그냥 ctrl키를 사용하고 있습니다 ㅠ
Capslock으로 백스페이스까지 쓸 필요는 없다면 저 스크립트 대신에
$Capslock::ctrl 를 넣으시면 될 겁니다.
(저는 capslock으로도 백스페이스를 많이 써서 제가 올린 스크립트대로 씁니다만...ㅎㅎ)
from CV
그런데 오토핫키와 같이 단축키 맵핑이 안 되고, 또 삼성노트북9은 레지스트리로 Ctrl 위치를 바꾸면 펑션키 사용에 문제가 생겨서 오토핫키로 넘어왔습니다.. ^^
하지만 방향키의 부재와 home, end, pgup, pgdn의 불편함 때문에
키맵핑을 통해 입맛대로 바꾸어 쓰는 게 가장 편한 배열인 듯 합니다... ㅎㅎ
번외로 혹시 키보드 케이블은 무엇 쓰시는지 여쭤봐도 될지요~?
Ctl+c
Ctl+v
로 바꿔서 쓸 수 있는 방법을 알고 싶네요
예) 세미콜론(;)은 주석문자로 뒤에오는 문자열은 인식하지 않습니다.
tab::^c ; "탭"키를 눌렀을때 ctrl + c 가 작동합니다.
Rshift::^v ; "오른쪽 시프트"키를 눌렀을때 ctrl + v 가 작동됩니다.
오토핫키에 사용할 수 있는 키리스트가 있습니다. 기본적으로 영문자는 그대로 사용하시면되고
^ : 콘트롤 , ! : 알트 , + : 시프트 , # : 윈도우키
F1 : {F1} , Tab : {tab} , 등...
키리스트는 오토핫키 설치 후 도움말 색인에서 keylist를 검색하시면 보실 수 있습니다.
글도 잘쓰시는 분이네요
정성스러운 글 감사합니다
w.ClienS
저는 전부터 위에 숫자키와 알파벳키 제외한 나머지 키는 꽤 헤비하게 바꿔쓰는지라, 아예 키보드 구매할때 펌웨어로 키리맵 기능을 지원하는가, 무각키캡버전도 있는가부터 보고 구매하네요.
저도 사용중인 스크립트 몇개 공유합니다.(구글링 + 자체제작)
;-------------------------------------------------------------------
;휠로 음량 조절하기 (알트 + 휠, 알트 + 가운데 버튼 클릭 : 무음 )
!WheelUp::Volume("+1", 1000, "")
!WheelDown::Volume("-1", 1000, "")
!MButton::Volume("+0", 1000, "Mute")
Volume(varNewSetting, varToolTip_removalTime, varControlType)
{
SoundGet MasterMute, , Mute
If MasterMute=On
SoundSet varNewSetting, , Mute
Else
SoundSet varNewSetting, , %varControlType%
SoundGet MasterVolume
MasterVolume:=Round(MasterVolume)
If varControlType=Mute
If MasterMute=Off ;이상하게 and 문이 안 먹네요..
MasterVolume=Mute
ToolTip % "Current Volume: " MasterVolume
SetTimer Remove_Tooltip, % "-" varToolTip_removalTime
}
;휠로 마우스 포인터 속도 조절 (윈도우키 + 알트 + 휠)
#!WheelUp::
DllCall("SystemParametersInfo", UInt, 0x70, UInt, 0, UIntP, varMouseSpeed, UInt, 0)
If (varMouseSpeed=20)
return
Else
{
varMouseSpeed++
DllCall("SystemParametersInfo", UInt, 0x71, UInt, 0, UInt,varMouseSpeed, UInt, 0)
}
ToolTip 포인터 속도(1-20) : %varMouseSpeed%
Settimer,Remove_Tooltip,1000
return
#!WheelDown::
DllCall("SystemParametersInfo", UInt, 0x70, UInt, 0, UIntP, varMouseSpeed, UInt, 0)
If (varMouseSpeed=1)
return
Else
{
varMouseSpeed--
DllCall("SystemParametersInfo", UInt, 0x71, UInt, 0, UInt,varMouseSpeed, UInt, 0)
}
ToolTip 포인터 속도(1-20) : %varMouseSpeed%
Settimer,Remove_Tooltip,1000
return
Remove_Tooltip:
ToolTip
return
;특정 프로그램 실행, 실행 중이면 활성화 시키고 아니면 새로 실행
#A::
ifwinexist ahk_exe totalcmd64.exe
winactivate
else
Run C:\TotalCommander\TOTALCMD64.exe
sleep, 500
winactivate
return
;텐키리스 키보드용
#^m::Send {Numpad0}
#^j::Send {Numpad1}
#^k::Send {Numpad2}
#^l::Send {Numpad3}
#^u::Send {Numpad4}
#^i::Send {Numpad5}
#^o::Send {Numpad6}
#^7::Send {Numpad7}
#^8::Send {Numpad8}
#^9::Send {Numpad9}
Remove_Tooltip 함수도 같이 가져가야 합니다. 포인터 속도 조절 아래 쪽에 있어요.
from CV
아예 바꿔버리고 싶으면 어떤식을 입력해야하나요?
ESC::`
`::ESC
라고 하면 되는건가요?
$`::esc
앞에 $를 붙여주셔야 합니다.
레지를 바꿔버리는 방법도 있습니다.
다시 시간 좀 내봐야겠네요^^;
좋은 팁 감사합니다.
멋진 댓글 주신 분들도!
혹시... autohotkey에서 설정한 매핑을 다른 컴퓨터에서 추가적인 프로그램 설치 없이
키보드 내에 저장할 수 있는지 궁금합니다!