지구에서 가장 완벽하고 쉬운 오토핫키 마우스 이동과 제어 튜토리얼

오토핫키(AutoHotkey)로 뭔가 본격적인 매크로를 만들려면 가장 기초라고 할 수 있는 게 바로 마우스 클릭이다. 사실 코드가 길어지고 비효율적이 되어서 그렇지, 마음만 먹으면 마우스 클릭만으로 대부분의 매크로를 구현할 수 있다.(예를 들면 바탕화면 → 새 폴더 → 텍스트 파일을 실행하는 걸 마우스 클릭만으로도 모두 할 수 있지만, ‘Run’명령어 하나로 간단하게 할 수 있다.) 그만큼 오토핫키(AutoHotkey) 매크로에 있어서 굉장히 알파 적인 녀석이다.

마우스 관련 오토핫키(AutoHotkey) 매크로는 사실 꽤 여러 가지가 있는데, ‘Click, MouseClickDrag, LeftClick, RightClick’ 등등 전부 필요 없고, ‘MouseMove, MouseClick, MouseGetPos’ 딱 세 가지만 알면 마우스 관련 이벤트를 대부분 모두 구현할 수 있다.(나중에 ‘ControlClick’ 이라고 실제 마우스는 쓰지 않고 비활성화 컨트롤 클릭을 하는 것도 있긴 한데, 지금 단계에선 넘어가도록 한다.)

‘MouseMove’의 기능과 사용 방법

MouseMove, X, Y [, Speed, Relative]

‘MouseMove’로 마우스를 움직인다는 명령을 선언하고, 입력한 ‘X’값(가로)과 ‘Y’값(세로)으로 마우스의 좌표를 지정한다. 단위는 픽셀이며 화면의 왼쪽 맨 위에서 오른쪽으로 ‘100px’, 아래로 ‘100px’의 위치로 마우스를 이동하고 싶다면 다음과 같이 코딩한다.

MouseMove, 100, 100

대괄호 안의 값은 반드시 적지 않아도 코드가 작동하며, ‘Speed’로 마우스가 움직이는 속도를 정한다. ‘0’이면 즉시 움직이고 숫자가 높을수록 느리게 움직이며 ‘100’이 한계다. 아무것도 설정하지 않는다면 기본값인 ‘2’가 적용된다. 마우스를 ‘x100’, ‘y100’의 좌표로 바로 움직이고 싶다면 다음과 같이 코딩한다.

MouseMove, 100, 100, 0

‘Relative’는 기존의 ‘X’, ‘Y’값으로 절대적인 위치로 이동한다는 명령을 상대적으로 바꿔준다, 즉

MouseMove, 100, 100

는 화면의 ‘x100’, ‘y100’ 위치로 마우스를 이동시키지만

MouseMove, 100, 100, , R

이렇게 ‘Relative’ 혹은 ‘R’을 추가하면 현재 마우스의 포인터 위치에서 ‘X’축으로 ‘100’만큼, ‘Y’축으로 ‘100’만큼 추가로 이동한다. 음수값을 적어준다면 반대로 움직인다.

‘MouseClick’의 기능과 사용 방법

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

기본적인 작동방식은 ‘MouseMove’와 같지만, 이동만 하는 것이 아니라 왼쪽 클릭, 오른쪽 클릭, 휠 버튼 클릭, 휠 버튼 굴림, x버튼(게이밍 마우스 등의 왼쪽에 추가적으로 있는 버튼이다) 등의 입력을 동시에 진행한다.

대괄호 안의 코드는 적지 않아도 작동하며, 생략했을 때의 기본값은 ‘WhichButton=Left’, ‘X,Y=현재 위치’, ‘ClickCount=1’, ‘Speed=2’ 이다.

현재 위치에서 마우스 왼쪽 클릭을 한 번 하는 코드는 다음과 같다.

MouseClick

현재 위치에서 마우스 오른쪽 클릭을 한 번 하는 코드는 다음과 같다. (‘Left’은 왼쪽 클릭, ‘Right’는 오른쪽 클릭, ‘Middle’은 휠 클릭, ‘Wheelup’, ‘Wheeldown’으로 휠을 위 아래, ‘Xbutton1’, ‘xbutton2’ 등으로 특수키를 입력할 수 있으며 각각 ‘L, R, M, WU, WD, X1, X2’로 줄여서 쓸 수 있다.

MouseClick, Right

‘x100’, ‘y100’의 좌표를 클릭하는 코드는 다음과 같다.

MouseClick, Left, 100, 100

‘x100’, ‘y100’의 좌표를 두 번 클릭하는 코드는 다음과 같다.

MouseClick, Left, 100, 100, 2

‘x100’, ‘y100’의 좌표를 즉시 이동해 두 번 클릭하는 코드는 다음과 같다.

MouseClick, Left, 100, 100, 2, 0

‘x100’, ‘y100’의 좌표로 이동해 왼쪽 클릭을 누른 상태로 있는 것은 다음과 같다.

MouseClick, Left, 100, 100, , , D

‘x100’, ‘y100’의 좌표로 이동해 왼쪽 클릭을 눌러 드래그하고, ‘x200’, ‘y200’의 좌표에서 왼쪽 클릭을 떼고 드래그를 끝내는 코드는 다음과 같다.

MouseClick, Left, 100, 100, , , D
MouseClick, Left, 200, 200, , , U

화면상의 ‘x100’, ‘y100’의 좌표로 절대값을 통해 이동하는 게 아니라, 현재 마우스 포인터 위치에서 ‘x100’, ‘y100’만큼 상대적으로 이동하는 코드는 다음과 같다.

MouseClick, Left, 100, 100, , , , R

‘MouseGetPos’의 기능과 사용 방법

MouseGetPos [, OutputVarX, OutputVarY, OutputVarWin, OutputVarControl, Flag]

‘MouseGetPos’와 관련된 기능들은 위와 같은데, 현재 우리가 원하는 마우스 컨트롤을 위해서는

MouseGetPos, OutputVarX, OutputVarY

위의 기능만 알면 된다. 현재 마우스 위치의 좌표를 ‘OuputVarX’, ‘OutputVarY’값에 저장한다는 뜻이고, 실제로 현재 마우스 위치를 저장했다가, ‘x100’, ‘y100’ 좌표로 이동한 뒤 다시 저장된 좌표로 돌아오는 코드는 다음과 같다.

MouseGetPos, 1X, 1Y
MouseMove, 100, 100
MouseMove, %1X%, %1Y%

다음은 이 ‘MouseGetPos’가 실제로 가장 많이 쓰이는 용도인데, 마우스 위치를 저장해뒀다가, 저장해둔 위치에서 ‘x100’, ‘y100’만큼 이동한 곳으로 움직이고 싶다면 다음과 같이 코딩하면 된다.

MouseGetPos, 1X, 1Y
MouseMove, 1X+100, 1Y+100

얼핏 보면 앞선 ‘MouseMove’의 ‘Relative’기능과 같아 보일 수 있지만, 해당 오토핫키(AutoHotkey)가 실행되어 있는 동안 ‘1X’, ‘1Y’값이 저장되어 있기 때문에, 여러 가지 방면으로 활용이 가능한 유용한 기능이다.

실전 예제

마무리로 오늘 배운 기능들을 모두 사용해서, 실제로 ‘F1’ 버튼을 누르면 현재 위치를 저장했다가, ‘x100’, ‘y100’의 좌표를 클릭하고 다시 돌아오는 실제 사례 코드를 구현하자면 다음과 같다.

F1::
MouseGetPos, 1X, 1Y
MouseClick, Left, 100, 100
MouseClick, Left, %1X%, %1Y%
Return

딱 이 페이지에 있는 내용만 이해하면, 오토핫키(AutoHotkey)의 기초적인 마우스 이벤트는 마스터했다고 보면 된다. 그러니까 한 번에 이해되지 않더라도, 저장해줬다가 필요할 때 다시 보면서 마스터할 수 있도록 하자. 직접 예제들을 붙여넣어 사용해 보던가, 실제로 배운 내용으로 코딩을 해보는 게 가장 좋다.