며칠전 에몽님의 글(https://www.clien.net/service/board/lecture/18682974CLIEN) 을 보고 현재 사용하는 컴퓨터에 적용을 해보았는데,오토핫키AHKVCapsLock으로한영키사용하기를개선해보기한자키연동클리앙 사용해보니 약간의 불편한 점이 있었습니다. 그건 바로 해당 스크립트로는 키를 릴리즈 했을 때, CapsLock 인지 한영전환인지가 결정된다는 점이었죠.
집에서 쓰고 있는 맥북은 그냥 누르고 있으면 일정 시간후에 불이 바뀌면서 아 CapsLock이 적용되었구나 하고 알 수 있었는데, 이건 땔때까지는 알수가 없으니, 이 사소한 차이가 불편하게 느껴졌습니다. 그래서 그렇다면 한번 코드를 개조해보자 생각하게 되었죠.
일단 저의 목표는 다음과 같습니다.
- CapsLock을 일정시간 이상 누르고 있으면 키를 때지 않아도 바로 CapsLock기능이 작동하게 한다.
- CapsLock을 일정시간이 되기 전에 때는 경우에는 한영키로 작동하게 한다.
AHK를 처음 접해봐서 몇번의 시행착오가 있었지만, 일단 완성된 코드를 먼저 공유하겠습니다. 코드는 다음과 같습니다.
capslock:: { While (GetKeyState("CapsLock", "P")) { ;키 눌림을 물리적으로 유지하는 동안 if (A_TimeSinceThisHotkey >= 300) { ;이 Hotkey 실행 후 300ms(0.3s) 지났다면 SetCapsLockState !GetKeyState("CapsLock", "T") ;CapsLock 토글 KeyWait("CapsLock") ;키 릴리즈까지 대기 Return ;Hotkey 종료 } } Send("{ vk15sc1F2}") ;한영키 전달}
제가 주석을 달아놓기는 했지만 간단하게 설명드리자면,
우선 캡스락을 누르면 해당 Hotkey가 실행됩니다. 그리고 바로 키가 눌려있는 상태인지를 확인하고, 시간을 측정해서 0.3초가 지나면 캡스락 토글을 하고 바로 종료하도록 했습니다. 만약 0.3초가 되기전에 키가 릴리즈된다면, while문을 빠져나와 한영키로 작동하게 됩니다.
중간에 KeyWait("CapsLock") 가 들어간 이유는 릴리즈를 확인안하고 바로 종료시키게 되면 해당 핫키가 다시 실행되면서 캡스락 불이 깜빡깜빡하는 문제가 생기더라구요. 그래서 확실하게 키 릴리즈를 확인하고 종료시키기 위해서 들어갔습니다.
만약 좀더 오래 눌렀을 때 캡스락이 되도록 하고 싶으시다면 저 300부분을 수정하시면 됩니다.
일단 여기까지 만들고 나니 또 욕심이 하나 나더라구요. "그렇다면, 캡스락을 이중탭을 했을 때에는 한자키로 작동하도록 하면 어떨까?" 하구요. 그래서 코드를 아래와 같이 다시 수정하였습니다.
capslock:: { While (GetKeyState("CapsLock", "P")) { ;키 눌림을 물리적으로 유지하는 동안 if (A_TimeSinceThisHotkey >= 300) { ;이 Hotkey 실행 후 300ms(0.3s) 지났다면 SetCapsLockState !GetKeyState("CapsLock", "T") ;CapsLock 토글 KeyWait("CapsLock") ;키 릴리즈까지 대기 Return ;Hotkey 종료 } } if (KeyWait("CapsLock","D T0.1")){ ;0.1초 안에 키가 눌렸을 경우 Send("{ vk19sc1F1}") ;한자키 전달 KeyWait("CapsLock") ;키 릴리즈까지 대기 } else { Send("{ vk15sc1F2}") ;한영키 전달 }}
여기서 추가된 것 중에서 제일 큰 역할을 하는 건 KeyWait("CapsLock","D T0.1") 입니다. 이건 CapsLock키를 기다려라는 명령인데, 파라메터로 D를 넣게 되면 키가 눌릴때 까지 대기하라는 의미이고, T0.1은 0.1초 이내에 해당 조건을 만족하면 1, 아니면 바로 0을 리턴하게 됩니다.
그래서 추가된 부분만 설명하자면 CapsLock 키를 0.1초이내에 두번누르게 되면 한자키가 작동합니다.
이제 추가로 욕심이 나는 부분은, 캡스락 그리고 한영키가 작동할 때마다 모니터 한가운데에 알림을 띄워보면 어떨까 싶기는 한데, 일단 공부를 좀더 해봐야 할거 같고, 이런 기능은 아직 찾아보지는 않았지만 이미 나와있는 유틸리티들이 많이 있지 않을까 싶기도 하네요.
그럼 제 글을 읽어주셔서 감사드리고 이만 물러가겠습니다. ㅎ