⚠ 이 강좌는 오토핫키 v1을 다룹니다
지금 보시는 강좌는 구버전 오토핫키(v1.1)를 다루고 있습니다. 따라서 본 강좌의 내용은 현재 최신 오토핫키 버전 (v2.0)과 호환되지 않습니다. 구버전의 정보가 필요한 것이 아니라면, 가능한 한 새로운 사이트에 작성한 v2 강좌(https://ahkv2.pnal.dev)를 봐주시길 바랍니다.
이번 강은 Send와 Sleep에 대해서 배워보겠습니다.
키보드를 입력하는 Send
키보드에 있는 키를 눌러주는 명령어로 Send가 있습니다. 우리가 직접 키를 누르지 않아도, 키 입력을 가능케 만들어줍니다. 매개변수를 살펴볼까요?
Send, Keys
Keys에는 누를 키가 들어갑니다. 누를 키는 기본적으로 중괄호를 감싼 후 써주셔야합니다. 아래와 같이 말입니다.
Send, {a}
Send, {Enter}
Send, {Tab}
Send, {Ctrl}
여기에 15강. 핫키와 핫스트링에서 배웠던 조합키를 이용해서 키 조합을 보낼 수도 있습니다. 이 때 주의하실 점으로는, 조합키를 보낼 땐 영문자를 반드시 소문자로 써주세요. 아래 예제를 실행시켜보시면 MsgBox가 출력되는 것을 볼 수 있습니다.
Send, ^{a}
return
^A::
MsgBox, Ctrl + A를 눌렀습니다.
ExitApp
마지막으로, 아래와 같이 문자열을 입력할 수도 있습니다. 섞어서 쓸 수도 있고요.
F1::
Send, 안녕하세요. 저는 홍길동입니다.
return
F2::
Send, 엔터키를 입력하시면 되겠네요.{Enter}얍얍
return
F3::
ExitApp
위 예제는 메모장에 커서를 둔 다음 F1부터 F3까지 순차적으로 눌러보시면 됩니다.
부가적인 사항은 아래와 같습니다.
- 조합키를 입력하지 않고, ! + ^ #을 그대로 입력하고 싶은 경우 Send를 SendRaw로 바꿔주세요. 중괄호를 입력하는 것 또한 마찬가지입니다.
- 키를 누르는 동작과, 떼는 동작을 따로 구분하여 줄 수도 있습니다. 누르는 건 {a Down}, 떼는 건 {a Up}과 같은 식입니다. 띄어쓰기는 필수입니다.
- 방향키는 Up / Right / Left / Down이며, 넘버 패드는 Numpad(기호명)식입니다.
- 한영키는 {VK15}입니다.
- 조합키는 !a나 !{a}의 꼴 모두 허용합니다. 다만 말씀드렸다싶이 !A나 !{A}는 되지 않습니다. 이유는 후술합니다.
- 키 이름 뒤에 숫자를 적어서 여러번 누르는 것을 구현할 수 있습니다 (Send, {A 5}는 A를 5번 누릅니다.)
[키를 보낼 때 대문자와 소문자는 다릅니다!]
Send, {A}와 Send, {a}는 그 동작이 다릅니다. (중괄호 없이, A와 a또한 다릅니다.)
그래서 조합키를 보낼 때 대문자를 사용하지 말란 것이었습니다.
우리가 컴퓨터에 대문자를 입력할 땐 Shift키를 누르고 입력하듯이, 오토핫키 또한 현재 CapsLock이 꺼져있을 때 기준으로 Send, {A}는 Shift+A를 전송하게 됩니다.
따라서 Send, !^{A}는 Alt+Ctrl+A가 아닌, Alt+Ctrl+Shift+A키를 보내게 되는 것입니다. 즉, Send 명령어는 대소문자 구분을 한다고 생각해주시면 되며, 문자가 아닌 키를 보내기 위해 중괄호로 감싸게 된다면 항상 소문자로 쓰는 방법도 좋은 방법입니다.
잠시 쉬어가는 Sleep
Sleep은 스크립트에 지연 시간(=딜레이)을 넣어주는 명령어입니다. 매개변수는 아래와 같습니다.
Sleep, DelayInMilliseconds
매개변수 이름이 정말 기네요. DelayInMilliseconds 매개변수에는 지연 시간을 '밀리초' 단위로 적어주시면 됩니다. 참고로, 1초 = 1000밀리초입니다.
아래처럼 스크립트를 구성한다면 1초에 한번씩 A키를 5번 입력할 것입니다. (정확히는 상술했듯 Shift+A키가 입력되어 대문자 A를 구성할 것입니다.)
Send, {A}
Sleep, 1000
Send, {A}
Sleep, 1000
Send, {A}
Sleep, 1000
Send, {A}
Sleep, 1000
Send, {A}
ExitApp
위 사이트에서 키 눌림을 테스트 할 수 있습니다. 길게 누르기 등도 확인할 수 있습니다. 메모장 등에 길게 누르기(Sleep과 Send, {Key Up/Down}을 이용해서 만들 수 있겠죠?)를 테스트하면 키 반복은 일어나지 않습니다. a키를 1초간 누른다고 aaaaaaaa....는 입력되지 않는단 것입니다. 이는 의도된 동작입니다.
그 이유를 말하자면, 사실 이건 윈도우의 기능입니다. 생각해보면 당연하지 않나요? 키를 계속 누르고 있는다고 해서 왜 문자가 반복되나요? 그럴 이유는 없습니다. 다만 사용의 편의성을 위해, "키를 길게 누르면 그 문자를 반복하는 기능이 필요하다"고 해서 윈도우에 그런 기능이 들어가있는 것입니다. 오토핫키의 Send 명령어로 몇초간 키를 누르고 있다면 이는 물리적인 키보드 입력이 아닌 단순히 소프트웨어적으로 "키를 누름" "키를 뗌"만 구현하는 것이므로, 키 반복은 일어나지 않는 것이 정상입니다.
프로그래밍에서 반복은 추후에 배울 반복문 Loop로 구성해야합니다. 이번 강의 키를 누름/뗌 동작은 말 그대로 키를 누르고 떼는 역할만 합니다. 위 테스트 사이트에서 확인해보시면 키를 누르고 떼는 동작은 잘 수행되는것을 볼 수 있습니다. 키 반복은 스스로 구현해보세요. 오늘 배운대로 Send, {Key 50}과 같이 횟수를 지정해주는것은 쉽지만, 반복 시간을 지정하는 것은 강좌를 다 보신 후에 스스로 구성해보고자 하면 가능할 것입니다.
< 17. 프로그래밍 문제 (3) | 18. Send와 Sleep | 19. 프로그래밍 문제 (4) >