17 - [오토핫키] Loop / Sleep

    키보드도 관리할 수 있고 마우스도 관리할 수 있게 되었습니다만. 핫키를 눌렀을때 단 한번만 작동을 하면 의미가 없겠죠? Loop는 원하는 스크립트를 반복해주는 기능을 갖고 있어요. 그리고 Sleep은 딜레이를 주기 위해 사용합니다.

     

    문법

    Loop [, Count]

     

    설명

    Count

    반복할 횟수, 생략하면 무한 반복합니다.

     

     

    문법

    Sleep, DelayInMilliseconds

     

    설명

    DelayInMilliseconds

    스크립트가 멈춰있을 시간을 밀리초 단위로 지정합니다. 0~2147483647 (24일)까지 가능하며, 표현식도 가능합니다.

     

     

    예제

    예제1)

    F1::

    ;A=0

    ;B=0

    Loop, 3

    {

      A+=1

      B:=B+1

      MsgBox, A는 (%A%) B는 (%B%)

    }

    Return

     

    F2::

    Count=3

    Loop, Count

    {

      A+=1

      MsgBox, A는 %A%

    }

    Return

    예제2)

    F1::

    Loop, 3

    {

      Sleep, 1000

      Send, 비밀의화원

    }

    Return

     

    F2::

    Count=3

    Stop=2000

    Loop, %Count%

    {

      Send, 비밀의화원

      Sleep, Stop

    }

    Return

     

    앞서 16 - [오토핫키] 표현식과 연산자 에서 A+=1은 A:=A+1과 같다고 했어요.

    예제1의 "F1"을 보면 Loop로 { } 중괄호 안에있는 스크립트를 3번 반복합니다. 이 때 변수 A는 1씩 더해서 대입하며 변수 B도 B에 B+1을 연산해서 넣은 후 메시지 박스를 출력 합니다. A값은 정상적으로 1씩 증가되고 있지만 B값은 출력되지 않고 있어요. 분명 두 연산방식은 같다고 했는데 왜 이런 결과가 나올까요? 바로 변수 선언의 차이입니다. A+=1은 그 자체로 변수를 선언하며 증가시켜주지만 A:=A+1은 A라는 변수가 선언 되어있어야만 A+1을 계산 할 수가 있기 때문이죠. 그렇다면 위에있는 A=0 B=0의 주석을 풀고 실행시켜 봅시다. 어때요? 똑같죠?

    자 이제 "F2"를 봅시다. Count라는 변수에 3을 선언했고 Loop의 반복횟수에 Count를 썼습니다. 어떻게 될까요?

    당연히 실행이 되지 않습니다! Loop의 Count는 표현식을 요구하지 않기 때문이죠.

    예제2의 "F1"은 예제1과 같지만 이번엔 Send를 사용 했어요. MsgBox의 경우 메시지 박스를 닫기 전까지 모든 스크립트가 정지 되어 있는 반면 일반적인 명령어들은 그렇지 않기 때문에 Sleep명령어로 딜레이를 적당히 주어야 오류가 발생하지 않아요.

    "F2"는 예제1과 마찬가지로 Count라는 변수에 3을 선언했고 Stop이라는 변수에 2000을 선언 했습니다. 이번엔 Loop에 변수 Count를 %로 둘러싸줬습니다. 이렇게 일반적으로 변수를 사용할때는 %로 진짜값을 꺼내줘야 한다는점 다시한번 잊지 마시고 그 다음을 봅시다. Sleep에 딜레이를 주어야 할 부분에 %없이 Stop이라고만 되어있습니다. 하지만 잘 작동을 하죠? 그 이유는 Sleep이라는 명령어는 문법에서 볼 수 있듯이 표현식을 지원하기 때문이에요. 일반방식과 표현식의 차이를 꼭 기억해두세요~

    * Loop안에서 Break를 만나면 Loop가 멈춥니다. 다음 강좌 If에서 설명합니다.

     

     

     

     

     

     

    Posted by 옹봉이