프날 오토핫키 강좌  v2

⚠ 이 강좌는 오토핫키 v2를 다룹니다

지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만, 새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.

36. MouseMove & Click


드디어 마우스 커서를 움직이고, 클릭해보겠습니다.

MouseMove

마우스 커서를 움직이려면 MouseMove 함수를 사용합니다. 이 함수는 원하는 좌표로 마우스 커서를 이동시켜주는 동작을 합니다.

MouseMove(X, Y [, Speed, Relative])

각각의 매개변수는 아래와 같은 역할을 합니다.

  • X: 커서가 움직일 x 좌표
  • Y: 커서가 움직일 y 좌표
  • Speed: 커서가 지정한 좌표까지 이동하는 속도(생략시 2)
  • Relative: 문자열 R이 전달되면 커서가 좌표 유형을 무시하고, 현재 마우스의 위치를 기준으로 이동함

1. X, Y

마우스가 이동할 X, Y 좌표입니다. 각 매개변수의 자리에 맞게 숫자로 적어주시면 됩니다.

좌표는 앞선 강에서 말씀드린 Window spy 프로그램을 이용하여 구할 수 있습니다. 움직이고자 하는 곳에 마우스 커서를 위치시킨 후, 그 값을 읽으면 되죠.

2. Speed

마우스 커서가 이동할 속도입니다. 선택 매개변수이기 때문에 생략이 가능하며, 기본 값은 2입니다. 숫자가 낮을수록 속도가 빠릅니다. 0은 즉시 이동하며, 100은 가장 느리게 이동합니다.

그러나 이 매개변수는 SendMode(후술)가 Event 모드일 때만 유효하며, 이외의 경우는 기본값이 2임에도 불구하고 지연 시간 없이 즉시 이동됩니다.

3. Relative

이 매개변수에는 R이라는 문자열만 집어넣을 수 있습니다. 만약 R이 전달되면, 현재 마우스 좌표에서 (x, y)만큼 더한 곳으로 마우스 커서를 이동시킵니다. 즉, 좌표의 원점(0, 0)이 현재 마우스 커서의 위치에 따라 달라지는 셈입니다. 당연히 CoordMode로 좌표 유형을 지정했어도 전혀 영향을 받지 않습니다.

Tip: Speed 매개변수의 사용

커서가 이동하는 움직임을 보려면 Speed가 1보다 커야합니다(0은 즉시 이동). 그리고 Speed 매개변수의 기본 값은 2이죠. 그러나 매개변수를 생략해도, 아래와 같이 Speed 매개변수를 부여해도 커서는 목표 좌표로 즉시 이동할 뿐, 그 움직임이 보이지 않습니다.

1MouseMove(100, 100, 10)
Speed 매개변수로 인수 10을 전달해주었지만, 마우스는 여전히 '즉시' 움직입니다.

그 이유는 SendMode에 있습니다. 오토핫키에서 키보드나 마우스의 동작 방식은 크게 Event, Input, Play가 있는데, 오토핫키는 기본 입력 동작 방식으로 Input 모드를 사용합니다. 그러나 마우스의 궤적을 보여주는 것은 Event 모드 뿐입니다.

따라서, 아래와 같이 SendMode 함수를 이용하여 입력 동작 방식을 Event로 바꿔준 후, 마우스 동작을 하면 그 속도가 조절됩니다.

1SendMode("Event")

MouseClick

MouseMove 함수를 익히셨다면, 마우스를 클릭하는 MouseClick 함수는 간단히 사용할 수 있습니다.

MouseClick([WhichButton, X, Y, ClickCount, Speed, DownOrUp, Relative])

모두 선택 매개변수네요. 각 매개변수의 역할은 아래와 같습니다.

  • WhichButton: 클릭할 마우스 버튼 (생략시 왼쪽 버튼)
  • X: 클릭할 x 좌표 (생략시 현재 x좌표)
  • Y: 클릭할 y 좌표 (생략시 현재 y좌표)
  • ClickCount: 클릭할 횟수 (생략시 1회)
  • Speed: 마우스 커서가 움직일 속도 (생략시 2)
  • DownOrUp: 마우스 커서를 누르고 있거나, 떼고 있게 할 수 있음 (생략시 눌렀다 뗌)
  • Relative: 문자열 R이 전달되면 커서가 좌표 유형을 무시하고, 현재 마우스의 위치를 기준으로 이동함

매개변수만 보고 눈치 채셨나요? MouseClick 함수는 단순히 제자리를 클릭하는 것이 아닌, 원하는 위치로 커서를 이동시켜 클릭시켜줍니다. 그리고 몇몇 매개변수는 MouseMove 함수와 사용 방식/목적이 동일한 것을 알 수 있습니다.

1. WhichButton

클릭할 버튼을 문자열로 적어줍니다. 마우스는 왼쪽/오른쪽 버튼과 휠버튼(가운데 버튼)이 있죠? 각각 LeftRightMiddle로 적어줍니다. 문자열이니까 따옴표 처리를 해야한다는 점 잊지 마시고요.

고급 마우스 옆에 달린 추가 버튼은 각각 X1X2로 적어줍니다. 또한, LeftRightMiddle은 각각 그 머릿글자(LRM)로 축약해서 쓸 수 있습니다.

2. X, Y

MouseMove의 경우와 동일합니다. 마우스가 클릭할 좌표를 숫자로 적어줍니다.

3. ClickCount

클릭할 횟수를 숫자로 적어줍니다. 이 매개변수부터는 보통 생략합니다.

4. Speed

MouseMove의 경우와 동일합니다. 입력 동작 방식을 Event로 바꿔주어야 마우스의 움직이는 속도를 조절할 수 있는 것도 MouseMove와 같습니다. (상단의 Tip 참고)

5. DownOrUp

문자열 DU만 적을 수 있으며, 마우스를 꾹 누르는 동작을 구현하거나 반대로 마우스 버튼을 떼는 동작을 구현할 때 사용합니다. D를 적으면 누르고 있고, U를 적으면 뗍니다.

6. Relative

MouseMove의 경우와 동일합니다.

Tip: Click과 MouseClick

MouseClick 함수와 별개로 Click 함수가 있는데, 공식 문서에서는 보다 유연한 동작을 하므로 Click 사용을 권장하고 있습니다.

그러나 Click은 매개변수가 하나(Options)인 함수이고, 그 매개변수에 전달할 값이 고정되어있지 않기 때문에 가르치기에 모호한 편이 있다고 생각합니다. 따라서 개인적인 판단으로 Click 대신 MouseClick을 강좌합니다. 저도 MouseClick을 자주 이용합니다.

실습

1. MouseMove로 마우스 이동시키기

먼저 MouseMove부터 실습해봅시다. 아래와 같은 코드는 (100, 100)부터 (200, 200)까지 있는 가상의 사각형의 네 꼭짓점 위치로 마우스 커서를 순서대로 이동시킬 것입니다. 속으로 화면 속에 좌표를 그려보신 후 스크립트를 실행해보세요. 생각한대로 동작하나요?

1Loop 3
2{
3 MouseMove(100, 100)
4 Sleep(300)
5 MouseMove(100, 200)
6 Sleep(300)
7 MouseMove(200, 200)
8 Sleep(300)
9 MouseMove(200, 100)
10 Sleep(300)
11}
예제 1. 가상의 사각형의 꼭짓점으로 이동하는 마우스

(100, 100), (100, 200), (200, 200), (200, 100)을 속으로 이어보시면 정사각형의 각 꼭짓점임을 알 수 있습니다. 이 예제를 통해 화면 상의 좌표에 대한 감을 익히실 수 있습니다.

2. 좌표 유형 변경 후 클릭하기

CoordMode를 통해 마우스 좌표 유형을 절대 좌표로 지정해준 후, 원하는 지점을 클릭하도록 스크립트를 작성해보겠습니다.

1F1::
2{
3 CoordMode("Mouse", "Screen")
4 MouseClick("Left", 300, 300)
5}
예제 2. 사용할 좌표 유형을 바꾸고 마우스를 클릭

이렇게 보통 MouseClick은 (x, y) 좌표까지만 지정해줍니다. 위의 예제는 절대 좌표(스크린 좌표)로 (300, 300) 부분을 클릭하겠죠.

이제 나머지는 응용의 영역입니다. 예제에 나오지 않은 매개변수를 이용해서 여러 동작을 구현해보세요. 그리고 연속적인 클릭으로 특정 작업을 자동화해보세요. 예를 들어서, F1을 누르면 시작 버튼을 누른 후 시스템을 종료하는 버튼을 누르게 해보거나, 바탕화면에 있는 아이콘을 더블클릭하게 만들며 연습해봅시다.

질문하러 가기