반응형

사실 조용히 쓰고 있었고, 다른 사람보다 열심히 쓰진 않았다고 생각하는데 영구정지를 당한김에, 개발 블로그에 AutoHotkey로 매크로를 만드는 법에 대해 안내해보려고 한다. (어찌됐든 AutoHotkey도 개발의 일종이다! 사실 더 많이 쓴 사람은 영정 안시키고, 내가 당해서 열받은 것도 쪼끔있음)

 

일반 AutoHotkey란, Windows에서 사용되는 Click이라던지 Mouse 이동이라던지 사용자가 GUI 환경에서 손으로 할 수 있는 모든 동작들을 예약된 간단한 명령어를 이용하여 컴퓨터가 동작시킬 수 있도록 하는 것을 의미한다.

그렇기 때문에, 프로그래밍 경험이 없는 사람들도 눈치만 있으면, 간단한 자동 클릭 매크로 정도는 만들 수 있고, 프로그래밍 업계에서 일했던 사람이라면, 창이 완전히 내려가 있는 상태에서도 사람이 누르는 것처럼 만들 수 있다.

 

기능이 워낙 많기 때문에, 내가 만들었던 로직에 대해 간단히 설명과 주석을 달아둘거고, 그 외 응용은 아래 홈페이지를 참고하면 간단히 업그레이드 할 수 있음

https://www.autohotkey.com/docs/AutoHotkey.htm

 

Quick Reference | AutoHotkey

 

www.autohotkey.com

 

본인이 메테오 법사를 했어서, 그거에 특화되게 만들어봤으니 응용해서 쓰길 바라고, 소스 짠 다음에 컴파일은 구글링 조금만 해봐도 아주 쉬워서 따로 안내 안함

Gui, Add, Button, x10 y20 w100 h30 gStart, 시작   ; 창에 시작 버튼 표시하고, 클릭 시 Start: 이후에 명령어를 실행한다.
Gui, Add, Button, x120 y20 w100 h30 gStop, 중지   ; 창에 중지 버튼 표시하고, 클릭 시 Stop: 이후에 명령어를 실행한다.
Gui, Show, w240 h80, Dia   ; Gui를 통해 그린 버튼들을 화면에 보여준다. 240*80 크기로
return ; 구문 한 묶음 당 필수 구문이니 넣어주도록 하자.

GuiClose:      ; 창 닫았을 때 동작하는 Event 
ExitApp        ; 난 창 닫았을 때 매크로가 종료되도록 하고 싶어서, 이 구문을 넣었다.

Start:         ; 시작 버튼 눌렀을 때 이리로 온다.
Settimer, potion, 60000, On, 1     ; 포션 빠는거 60000ms (60초) 마다 1순위로 실행하게 할거임
Settimer, skill_meteor, 10000, On, 2  ; 메테오는 10초마다 2순위로 실행하게 할거임
Settimer, skill_3, 7000, On, 3  ; 스킬 3번 버튼은 7초마다 3순위로 쓰고 싶어

Loop        ; 반복문 : 스킬만 쓰면 캐릭터가 멍하니 서서 스킬만 쓰니까, 0.3초마다 평타 치고 싶어 (난 평타를 z로 설정했는데, 다른 키면 바꿔도 돼)
{	
	ControlSend,, {shift down}z{shift up}, Diablo Immortal	 ; 시프트 누르고 z 누르고 시프트 풀어, Diablo Immortal 창 이름을 가진 곳에서
	sleep, 300  ; 이 구문이 없으면 컴퓨터가 뻗을 수 있으니, 0.3초 쉬면서 반복하자
}
return  ; 이벤트 구문 하위에 넣어주자

Stop:    ; 중지 버튼 눌렀을 때 이리로 온다.
Pause    ; 모든 동작 중지해
return   ; 이벤트 구문 하위에 넣어주기

potion:  ; 포션 동작 이벤트 구문
ControlSend,, q, Diablo Immortal    ; q를 누를건데, Diablo Immortal 이라는 창에서 누를거야
return   ; 이벤트 구문 하위에 넣어주기

skill_meteor:   ; 메테오 이벤트 구문
Critical       ; 메테오는 동작이 길어서, 이 구문을 넣어주어야 다른 동작에 영향을 받질 않아
ControlSend,, 4, Diablo Immortal   ; 4번 버튼에 있는 갑옷 시전해
sleep, 1000   ; 다음에 2번에 넣어둔 메테오 시전할거고, 너무 빨리 누르면 키가 씹히니까 1초 쉬어
ControlSend,, 2, Diablo Immortal ; 2번 버튼에 넣어둔 메테오 시전해
sleep, 1000   ; 마찬가지로 1초 쉬었다가 비전바람 쓸거야
ControlSend,, 1, Diablo Immortal  ; 1번에 넣어둔 비전바람으로 메테오 쓴 곳에 불 질러
sleep, 1000   ; 마찬가지로 1초 쉬었다가 비전바람 한 번 더 쓸거야
ControlSend,, 1, Diablo Immortal  ; 1번에 넣어둔 비전바람으로 메테오 쓴 곳에 불 질러
return   ; 이벤트 구문 하위에 넣어주기

skill_3:     ; 이거 번개 파장? 이었나 영정돼서 기억이 안나는데 그 퍼졌다가 돌아오는 스킬이야
ControlSend,, 3, Diablo Immortal   ; 3번 버튼 눌러
return ; 이벤트 구문 하위 기억하지?


F8::     ; 매크로 창에 시작 버튼이 있지만, 직접 누르기 귀찮아, F8로 실행 가능하도록 넣은 구문
Goto, Start   ; Start: 이후 구문 실행할거야
return    ; 이것도 이벤트 구문 하위니까 return 넣자

F9::    ; 중지도 직접 누르기 귀찮아, F9로 실행되도록 넣자
Pause   ; 모든 동작 중지, 다시 한 번 누르면 재개
return  ; 이벤트 구문 하위

F10::   ; 이거 우리 불멸단이라 금고 가려면 광클 필요해, 그래서 F10누르면 광클되게 해봤어
while GetKeyState("F10", "T")   ; F10 누르면 왼쪽 마우스 버튼을 커서 위치에서 0.01초마다 눌러!, 다시 누르면 중지해
{
    MouseClick, left
	sleep, 10
}
return ; 이벤트 구문 하위야

F12::   ; F12로도 종료할 수 있어
ExitApp

 

일단 이거 앱 플레이어가 아니고, 배틀넷 런처의 PC 버전에서 비활성화 형태로 동작하지만, 구조상 마우스까지 후킹할 순 없어서, 마우스는 위치해둬야 함

(매크로는 마우스 커서 위치 기준으로 동작한다고 보면 되고, 듀얼 모니터 쓰는 사람은 슬쩍 옆 모니터로 커서 넘기면, 돌리면서 다른 거 할 수 있음, 비활성 윈도우 이벤트의 묘미)

 

퍼갈땐 꼭 댓글로 출처 명시해주길 바라고, 궁금한 점은 댓글 달아주면 확인 가능한 시간에 답변 드림

반응형
,
반응형