LearningNote
[오토핫키] 타이밍 제어 본문
[오토핫키] 타이밍 제어
타이밍을 제어하는 방법에 대해 알아보겠습니다.
키보드 제어와 마우스 제어에 대해 공부하면서
Sleep 명령어에 대해 간단히 다루어본 적이 있습니다.
잠시 특정 시간 동안 아무것도 하지 말고 대기하라는 의미죠.
사실, Sleep 은 크게 더 다루어야 할 내용도 딱히 없습니다.
명령어와 명령어 사이에 Sleep 을 넣게 되면,
첫 번째 명령을 수행한 후에, 특정 시간만큼 대기하고, 그다음 명령을 수행합니다.
간단 도움말에는 다음과 같이 명기 되어 있습니다.
Delay 는 millisecond 단위이므로,
1초를 쉬기 위해서는 인자에 1000 을 입력해야 합니다.
Sleep, Delay
곧바로 실습해봅시다.
좌표 (200, 200) 을 클릭하고,
2초 쉬었다가,
Hello World! 를 입력하는 코드를 작성해보겠습니다.
#SingleInstance, Force
F4::
ExitApp
!1::
Click, 100, 100, 1
Sleep, 2000
Send, Hello World{!}
return
빈 메모장을 하나 열고 창을 활성화합니다.
오토핫키를 실행하고 Alt + 1 키를 눌러 실행해보세요.
이제 이런 것은 너무 쉽게 느껴 지시죠?
실력이 많이 향상되었군요. 잘하셨습니다.
Sleep 은 단 한번 대기하는 명령어입니다.
타이밍을 제어할 수 있는 다른 명령어 중에는
주기적으로 반복 수행할 수 있는 것도 있습니다.
SetTimer 라는 명령어입니다.
간단 도움말을 살펴보면 다음과 같습니다.
SetTimer, Label [, Period|On|Off]
전달 인자들을 한번 살펴보겠습니다.
첫 번째 인자인 Label 에는 어떤 블록을 수행할 것인지를 지정합니다.
레이블(라벨)은 우리가 일상생활에서 많이 접해본 단어이듯이,
이름을 정해주는 것입니다. 어떤 이름이냐 하면 코드 블록에 이름을 정하는 것이죠.
Label 을 정의하는 방법은 핫키를 정의하는 것과 유사합니다.
핫키 정의와 레이블 정의하는 방법을 코드를 통해 비교해보도록 하겠습니다.
; 핫키를 정의하는 방법
!2::
SetTimer, label1, 2000
return
; 레이블을 정의하는 방법
label1:
Click, 500, 500, 0
return
핫키는 우측에 콜론(:) 두 개를 붙이는 반면,
레이블은 우측에 콜론을 한 개만 붙입니다.
코드 블록은 좀 더 보기 좋게 하기 위해
중괄호({}) 를 씌우기도 합니다.
!2::
{
SetTimer, label1, 2000
return
}
label1:
{
Click, 500, 500, 0
return
}
중괄호 안에는 탭을 입력해서 들여 쓰기(Indentation)를 하는 것이 좋습니다.
실행 결과에는 영향을 주지 않지만,
가독성을 좋게 하기 위해서는 단계별로 들여 쓰기 할 것을 권장합니다.
들여 쓰기를 권장한다고 표현했지만, 사실은 필수적이라고 볼 수 있습니다.
간단한 코드에서는 크게 차이가 없지만,
나중에 다루게 될 반복문이나 조건문 등이 등장하면
들여쓰기를 하지 않고서는 코드를 정확하고 빨리 파악할 수가 없습니다.
따라서 들여 쓰기에는 각별히 신경 쓰는 습관을 기르시기 바랍니다.
다시 명령어 설명으로 되돌아가겠습니다.
SetTimer, Label [, Period|On|Off]
첫 번째 인자가 Label 이었습니다.
두 번째 인자에는 여러 가지 중 하나를 쓸 수 있으며,
대괄호 안에 있기 때문에 필수적이 아닌 선택적인 요소입니다.
Period 에는 반복할 주기를 입력할 수 있습니다.
Sleep 과 마찬가지로 millisecond 단위로 입력하시면 됩니다.
Period 대신에 On 을 입력하면,
기존에 중단되었던 타이머를 다시 활성화합니다.
Off 를 입력하면 지정한 타이머를 비활성화합니다.
두 번째 인자를 생략하면 기본값인 On 이 사용되며,
250ms 마다 Label1 블록을 반복 수행합니다.
신버전에서는 두 번째 인자에 Delete 옵션도 지정할 수 있습니다.
Off 와 다르게 Delete 하게 되면 해당 타이머는 다시 활성화할 수 없습니다.
그리고 사실 세 번째 인자도 있습니다.
Priority(우선순위) 를 지정하는 인자입니다.
하지만, SciTE4AutoHotkey 에디터(Version 3.0.06.01) 에는
기본적으로 간단 도움말이 나타나지 않습니다.
초심자분들께서는 굳이 아실 필요는 없기 때문에
더 깊게 알고 싶으시면 다음의 링크를 통해 공부하시기 바랍니다.
http://autohotkeykr.sourceforge.net/docs/commands/SetTimer.htm
Sleep 과의 차이점 중 또 한 가지 중요한 특징이 있습니다.
Sleep 은 대기하는 동안 다음 명령어로 넘어가지 않고 기다립니다.
하지만, SetTimer 는 지정한 시간을 기다리는 동안
다음 명령어로 쭉쭉쭉 넘어갑니다.
그러다가 시간이 되면 해당 블록을 수행합니다.
이것을 눈으로 직접 확인하고 싶으시면 다음과 같이 하시면 됩니다.
우선 코드를 모두 작성합니다.
#SingleInstance, Force
F4::
ExitApp
!1::
Click, 100, 100, 1
Sleep, 2000
Send, Hello World{!}
return
!2::
SetTimer, label1, 2000
return
label1:
Click, 500, 500, 0
return
!3::
SetTimer, label1, 2000
Send, Hello World{!}
Sleep, 500
Send, Hello World{!}
Sleep, 500
Send, Hello World{!}
Sleep, 500
Send, Hello World{!}
Sleep, 500
Send, Hello World{!}
Sleep, 500
Send, Hello World{!}
Sleep, 500
Send, Hello World{!}
Sleep, 500
return
오토핫키를 다시 실행하고
메모장 하나를 띄웁니다.
Alt + 2 를 한번 눌러보세요.
그러면 label1 이 2초 후에 수행되기 때문에
마우스 포인터가 (500, 500) 위치로 움직입니다.
확인하셨으면, F4 키를 눌러 오토핫키를 종료해주세요.
이번에는 Alt + 3 키를 눌러보세요.
SetTimer 를 2초로 지정했으며,
2초간 대기하지 않고 곧바로 Hello World! 가 메모장에 0.5 초마다 반복적으로 찍힙니다.
그러다가 2초가 되면,
마우스 포인터가 (500, 500) 으로 이동되는 것을 볼 수 있습니다.
이 점을 활용하면 다양한 형태로 프로그램을 만들 수 있습니다.
구체적인 사용법까지는 아니더라도 이런 게 있다는 것만 알고 계시면 되겠습니다.
'오토핫키' 카테고리의 다른 글
[오토핫키] 변수와 표현식(2) (0) | 2020.06.30 |
---|---|
[오토핫키] 변수와 표현식(1) (0) | 2020.06.29 |
[오토핫키] 좌표계(2) (0) | 2020.06.25 |
[오토핫키] 좌표계(1) (0) | 2020.06.24 |
[오토핫키] 마우스 제어(3) (0) | 2020.06.23 |