해보고 싶은 거 다 해 보는 블로그
스크립트 하나로 여러 개의 클라이언트 제어하는 방법 본문
이전에 보여드린 적 있는 매크로들입니다. 이 두 포스팅에서 볼 수 있는 공통점은 하나의 실행 파일로 여러 개의 클라이언트를 제어한다는 점입니다. 한 번에 여러 개의 클라이언트를 제어하는 방법을 몇 분께서 질문해 주셨는데, 포스팅으로 이제야 대답해드립니다.
그 전에, 약간의 연관된 팁을 먼저 드립니다. 일단 한 번 생각보세요. 아래와 같은 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 내장변수를 씁니다.
정확한 명령어의 정의를 보고 싶으시면, 아래의 링크를 사용해 보세요. 헷갈리거나 잘 모르는 명령어를 찾을 때 유용하니 즐겨찾기를 하시거나 해서 자주 보시기를 추천합니다.
'매크로 > 게임을 위한 매크로' 카테고리의 다른 글
일랜시아 매크로 제작에 유용한 포인터들-(1) (8) | 2020.04.30 |
---|---|
오토핫키 매크로 구상 시의 팁 (0) | 2020.04.25 |
게임을 위한 매크로 서문 (4) | 2020.04.18 |