해보고 싶은 거 다 해 보는 블로그

스크립트 하나로 여러 개의 클라이언트 제어하는 방법 본문

매크로/게임을 위한 매크로

스크립트 하나로 여러 개의 클라이언트 제어하는 방법

넌출월귤아속 2020. 5. 21. 00:29
 

수호천사 끝나가는데 헐레벌떡 모험가 앵벌이 매크로 만들어 봤다.

오랜만입니다. 수천 기간이라고 남들 다 일랜 열심히 할 때 저는 직업적 사정으로 휴랜 중이었네요. 구글 애드센스 심사가 코로나로 취소되어 버려서 블로그 글 적는 재미도 아무래도 식더군요.

nunchoolberry.tistory.com

 

새싹 모자 매크로를 만들어봤다.

식목일 이벤트는 케이에게 [병든마틸다]를 받는 것으로 시작합니다. 이 나무는 얼마든지 받을 수 있습니다. 다만 1일 후엔 사라지니 다시 받아야 합니다. [병든마틸다]를 한 개 이상 가지고 있는

nunchoolberry.tistory.com

 

이전에 보여드린 적 있는 매크로들입니다. 이 두 포스팅에서 볼 수 있는 공통점은 하나의 실행 파일로 여러 개의 클라이언트를 제어한다는 점입니다. 한 번에 여러 개의 클라이언트를 제어하는 방법을 몇 분께서 질문해 주셨는데, 포스팅으로 이제야 대답해드립니다.

그 전에, 약간의 연관된 팁을 먼저 드립니다. 일단 한 번 생각보세요. 아래와 같은 Postmessage 명령어를 이용하시기 위해서, 어떤 방법으로 WinTitle에 넣을 변수를 지정하시나요? 윈도우 제목을 쓰기 싫다면 PID나 ID를 쓸 수도 있겠습니다만, 그것은 지금은 중요하지 않습니다.

PostMessage, 0x100, 0xD, 0x1C0001, , %Title%​

Inputbox를 쓸 수도 있겠지만, 이렇게 쓰는 분은 많이 없으리라 생각합니다. 한 단계 위로 가보면, 이런 방법을 쓸 수도 있겠습니다.

WinGetTitle, Title, A​

Sleep 등으로 잠시 지연을 주고, 지연 시간이 끝나면 그 순간에 활성화되어있는 창의 제목을 받아오는 식입니다. 저 혼자 대충 쓰고 Gui 쓰기도 귀찮을 때 굉장히 애용하는 방법입니다. 한 단계 더 위로 가봅시다. 여기저기 많이 배포되고 있는 매크로들의 경우엔 어떻게 하는 걸까요? 나는 인터넷도 켜놨고 치트엔진도 켜놨고 카카오톡도 켜놨는데 신기하게도 일랜시아만 찾아서 어떤 캐릭터에 매크로를 켤 지 고르게 해줍니다. Winget을 쓰면 됩니다. Winget은 이미 가지고 있는 프로세스나 윈도우의 어떤 정보를 토대로 다른 정보를 열람하는 명령어입니다.

WinGet, OutputVar [, Cmd, WinTitle, WinText, ExcludeTitle, ExcludeText]

그런데 아래처럼 그 "다른 정보"의 원하는 형식을 적는 란인 Cmd에 List, WinTitle에는 ahk_class Nexon.Elancia​라고 적어 넣으면

Winget, MyArray, List, ahk_class Nexon.Elancia​

변수 MyArray에는 켜져있는 일랜시아 클라이언트 수가 들어가고, MyArray1부터 일랜시아 창들의 ID가 들어갑니다. 결과적으로 이런 명령어가 된겁니다. "Nexon.Elancia라는 클래스를 지닌 창을 찾아서 그 창들의 갯수를 MyArray에 넣고 MyArray1부터 갯수까지 그 창들의 ID를 넣어라." 이 ID를 이용해서 다시 Winget을 쓰면 제목들의 나열을 할 수 있게 되겠죠. 이 때, Winget을 어떻게 쓰시겠어요? 일일이 MyArray1의 제목, MyArray2의 제목, MyArray3의 제목..... 내가 일랜시아를 몇 개 켤 지도 모르고, 그렇다고 20개 넘게 켤 일은 없겠지 싶으니 20개만 써놓자 하기도 뭐한데요. 이럴때 Loop와 A_Index 내장변수를 씁니다. 

 

 

정확한 명령어의 정의를 보고 싶으시면, 아래의 링크를 사용해 보세요. 헷갈리거나 잘 모르는 명령어를 찾을 때 유용하니 즐겨찾기를 하시거나 해서 자주 보시기를 추천합니다.

 

WinGet

WinGet 지정된 창의 유일한 ID, 프로세스 ID, 프로세스 이름, 또는 그의 콘트롤 목록을 열람합니다. 또한 지정된 기준에 부합하는 모든 창의 목록을 열람합니다. WinGet, OutputVar [, Cmd, WinTitle, WinText, Exc

ahkscript.github.io