본문 바로가기
내알공 오토핫키

9-1장. 오토핫키 매크로의 기본 ImageSearch (이미지서치)

by 세연쭌 2020. 3. 20.
반응형

ImageSearch(이미지 서치)에 대해 알아보려고 합니다.

ImageSearch란 이미지를 찾다 라는 말입니다.

이 함수를 이용하여 내가 원하는 방향의 매크로를 만들어 볼 수 있습니다.

좌표를 이용해하는 방법은 좌표를 일일이 찾고 그 좌표를 입력해야 하고 변수가 생기면

다른 곳을 클릭하거나 드래그하는 일도 생기죠 

그렇게 좌표 오류가 생기는 것을 방지하고 이미지를 찾아 클릭 드래그 등등 이런 것을 할 수 있는 것이라 생각하시면 됩니다.

그럼 이미지 서치 시작해 볼가요? 

이미지 서치의 기본은 이미지를 찾아서 클릭할 수 있는 것인 거죠 

자 저는 모바일 게임 '거지 키우기'라는 게임으로 매크로를 제작해보겠습니다.

거지 키우기 게임사와는 아무런 관계가 없습니다. 

제가 동영상을 올려드릴 텐데 동영상에는 기본 적인 소스와 실행하는 장면과 약간의 설명만 나옵니다.

Loop 문 무한클릭

루프 문을 통해 무한 클릭만 하는 프로그램을 제작해 실행해보았습니다. (3장. 루프 문 바로가기)

반응형

아래의 동영상에는 이미지를 인식하여 클릭하는 이미지 서치 기능으로 설명하도록 하겠습니다.

설명하기에 앞서 이미지 서치에서 인식이 제일 잘되는 그림파일이 있습니다. (확장자)

JPG처럼 확장자를 말하는 것인데요 인식이 제일 잘되는 확장자는. png 또는 /. bmp 파일입니다 

그림판에서 저장을 하실 때 확장자를 png/bmp로 설정을 하여 저장하시기 바랍니다.

그림판에서 확장자 설정하는 방법은 그림판에서 그림을 잘라내기 하신 후 저장하실 때 

파일 -> 다른 이름으로 저장 -> 파일 이름 쓰시고 -> 그 바로 아래 파일 형식에서 png나 bmp 파일을 설정 후 

저장하시면 됩니다.

그럼 이미지 서치를 통해 그림을 어떻게 인식하고 어떻게 하는지 스크립트도 만들어보고 

스크립트에 대해 설명도 드리겠습니다.

ImageSearch를 오토 핫키 스크립트 창에 치신 후 , 쉼표를 치시면 

이런 식으로 나올 거예요 기본적으로 outputVarX, outputVarY, X1, Y1, X2, Y2, imageFile이 뒤로 쭉 나옵니다.

이중에 outputVarX, outputVarY만 신경 쓰시면 되고요, 그 뒤에 X1, Y1은 찾게 되는 시작 지점의 좌표입니다.

X2, Y2는 마지막 좌표 끝나는 지점의 좌표입니다.

시작하는 좌표에는 0,0을 넣으시고

끝나는 좌표에는 A_ScreenWidth, A_ScreenHeight 넣으시면 됩니다.

A_ScreenWidth, A_ScreenHeight는 오토 핫키 내에 내장되어있는 내장 변수입니다.

오토 핫키 내에는 내장 변수가 많이 있습니다.

오토 핫키의 내장변수의 형식이 있는데 그 형식의 시작은 A_(대문자에 이에 언더 바로) 시작이 됩니다.

오토 핫키 스크립트 창에서 A_하시면 내장 변수들이 많이 나옵니다.

이런 식으로 내리다 보시면 많은 변수들이 존재한다는 것을 알 수 있으실 겁니다.

 

사용할 수 있는 내장 변수는 많습니다.

설명을 계속 이어가도록 하겠습니다. 

그다음은 imageFile입니다 내가 저장하고 내가 읽어와야 할 파일 그파 일명을 입력하는 것인데요 

그런데 파일만 읽어오는 것이 아닙니다 그파일 앞에 *숫자 가 붙습니다 어떤 식이냐면,

*50 imageFile입니다. *50의 의미가 뜻하는 것은 무엇일까요?

바로 오차 범위입니다. 내가 파일명을 올리고 그파 일의 그림에 따라 오차범위라는 것이 존재합니다. 

그 오차범위의 수라 고생 각하시면 되겠습니다.

제가 위의 방법대로 설명한 것에 대한 스크립트를 만들어보면 

ImageSearch, X, Y, 0,0, A_ScreenWidth, A_ScreenHeight, *50 파일명이 됩니다.

제가 쓰는 방법대로 이미지 서치를 하자면 저는 파일명을 Bg로 만들겠습니다.

ImageSearch, bgX, bgY, 0,0, A_ScreenWidth, A_ScreenHeight, *50 Bg.png

붉은 부분이 보이시나요 저는 알아보기 쉽게 변수를 줄 때 저렇게 파일명에 따라서 줍니다.

저 앞부분에 bgX, bgY가 필요한 이유 바로 그에 해당하는 좌표로 이동하려고 하기 때문입니다.

변수가 없다면 자기 멋대로 가겠죠? bg라는 파일명도 있고 Ag라는 파일명도 있는데 

변수가 담겨있지 않다면 bg나 Ag나 별반 다를 거 없이 똑같이 움직이겠죠? 하지만 

오토 핫키에서는 저위의 변수를 사용하지 않는다면 마우스는 움직이지 않을 것입니다.

자그럼 이미지 서치로 스크립트를 만들어보겠습니다 ( 루프 문으로 같은 행동을 무한 반복할 수 있도록 만들겠습니다.)

 

Loop
{

ImageSearch, bgX, bgY, 0,0, A_ScreenWidth, A_ScreenHeight, *50 Bg.png
( if ErrorLevel = 0 )
{
bgX:=bgX+1 
bgY:=bgY+1
MouseMove, % bgX%, % bgY%  ;(마우스 무브 바로가기)
MouseClick, l ;(마우스 클릭)
sleep,100
}

}

return

오잉? ( if ErrorLevel = 0 ) / bgX:=bgX+1 / bgY:=bgY+1 / % bgX%, % bgY% 3가지가 더 생겼네요?

저것들이 의미하는 것들이 무엇일까요? 하나씩 알아보겠습니다.

( if ErrorLevel = 0 ) if(만약에) Error(에러) Level(레벨) = 0?????????

이게 뭐지? 만약 에러가 생긴다면 무시해라 라고 생각하시면 됩니다. 

이중 0이 의미하는 것은 false / 1이 의미하는 것은 true라고 생각하시는 게 좋겠네요

 

하지만 정말 false / true를 의미하는 것은 아니니 오해는 하지 마세요 

 bgX:=bgX+1 / bgY:=bgY+1 이건 뭘의미 할까요? 

바로 제아 아까 말씀드렸던 그곳으로 이동하기 위한 것이라고 생각하시면 됩니다.

:= 의 의미 알고 계신가요? 바로 표현식의 결과를 저장할 변수의 이름을 정하는 것입니다.

x := 5 ;  x는 = 5와 같음이라는 뜻입니다.

그렇다면 +1이 의미하는 것은 무엇일까요? 

그림 크기가 예를 들자면 5x5사이즈일 경우 

bgX:=bgX+1

bgY:=bgY+1 

위 와같다면

이렇다고 생각하시면 됩니다 X의+1Y의+1의 붉은 점부분을 가리키는 것이죠 

가리키기만 할 뿐 저기로 이동하는 것은 아닙니다.

그래서 필요한 것이  % bgX%, % bgY% 바로 이것입니다.

 % bgX%, % bgY% 이것이 의미하는 것은 무엇일까요?

바로 변수를 읽어오는 것이라고 생각하시는 것이 빠를 것 같습니다 

위에 있는 

bgX:=bgX+1

bgY:=bgY+1 

여기서 정하였던 변수 bgX와 bgY를 읽어와서 그 위치(좌표)로 마우스가 이동이 가능할 수 있도록 

하는 것이라 생각하시면 되겠네요 

%가 의미하는 것은 % 안의 변수를 읽어 오는 것이라 생각하시면 되겠네요 

예를 들면 bgX의 변숫값이 있는데 AgX의 값을 읽어온다면 다른 값의 좌표로 이동하게 되겠죠?

그렇기 때문에 % 안에 변수를 정확하게 넣는 것이 중요합니다.

Bg.png의 Bg는 파일명입니다. 그 뒤의. png는 확장자 명입니다.

만약 png가 아닌 bmp로 확장자를 하셨을 경우 bg.bmp 가 됩니다.

저는 개인적으로 png확장자를 선호 합니다.

오늘은 여기까지 설명을 마칠게요 다음 10장에서는 위에 있는 스크립트로

이미지를 찾아서 마우스가 이동하고 클릭하고 등의 스크립트를 만들어보도록 하겠습니다. 

긴 글을 읽어주셔서 너무 감사합니다.

 

프로그래밍은 응용이다 !! 입니다.

9-2오토핫키 매크로 기본 이미지서치_바로가기

반응형

댓글