Water Quality Analysis 자세히보기

AUTOHOTKEY

원하는 이미지를 찾아 동작한다? 이미지 서치(ImageSearch)

Hi, 2016. 9. 11. 11:07

    아마 오토 핫 키 하면 가장 먼저 떠오르는 게 이미지 서치입니다. 아무래도 이 기능 때문에 많이들 배우려고 하시는 거 같습니다. 오토핫키에서 가장 강력한 기능이죠. 이미지 서치는 말 그대로 이미지를 찾는 겁니다. 이미지를 찾았을 때의 동작과 찾지 못 했을 때의 동작으로 나누어집니다. 이미지 찾는 것과 기존의 명령어들과 조합하면 색다른 핫 키를 만들어 볼 수 있죠. 만약 좌표를 지정하여 프로그램을 동작하게 했다면, 그 프로그램이 이동했을 때 해당 되는 그 좌표에는 아무것도 없으므로 실행하지 못하는 경우가 생깁니다. 그러나 이미지 서치 기능을 사용한다면 이미지를 찾기 때문에 서치 범위 내에만 존재한다면 어느 곳에 위치하더라도 실행이 가능합니다. 이미지서치는 화면 전체를 검색하다보면 느려지는 경우가 많아서 범위를 줄여서 서치를 많이 합니다. 한번에 한 화면을 검색하는 것이 아니라, 0,0부터 오른쪽으로 스캔하면서 내려가기때문에 화면이 커질수록 딜레이가 길어지게 됩니다. 따라서 이미지가 위치하는 범위를 지정하여 스캔하는 것이 좋습니다.




ImageSearch, 변수1,변수2, x1, y1, x2, y2, *오차율 파일명.PNG(bmp)




   변수 1, 변수 2에는 이미지가 찾은 좌표가 입력됩니다. 만약 A=2라면 A에 2가 들어있듯이, 위 이미지서치의 변수 1에는 이미지의 x좌표, 변수 2에는 이미지의 y좌표가 들어가 있게 됩니다. 


    x1, y1은 이미지 서치를 시작할 첫 번째 점입니다. 이미지를 찾을 공간을 지정해 주어야 합니다. 마우스에 대한 포스트를 보신다면 좌표에 대한 개념을 아실 수 있는데, 왼쪽 상단이 0, 0이 되고 오른쪽 끝 하단이 컴퓨터 해상도(1920 x 1080)가 됩니다. 컴퓨터 해상도는 컴퓨터마다 다릅니다. 마찬가지로 x2와 y2는 이미지 서치의 범위의 끝점(컴퓨터의 해상도)이라고 생각하시면 됩니다.


*오차율은 0~100까지이며, 클수록 더 이미지와 가까운 것을 찾아냅니다.


    그다음은 파일명입니다. 일반적으로 동일한 폴더 내에 위치할 경우는 파일명. PNG(bmp)로 써도 무방하나 만약 같은 폴더에 있지 않은 경우 파일주소를 모조리 적어주어야 합니다. ( C:\Users\J\Desktop\오리\파일명. PNG(bmp) )






script


Insert::


ImageSearch, getx, gety, 0,0, A_ScreenWidth, A_ScreenHeight, *40 13.PNG

if ErrorLevel=0

{

MouseClick, Left, %getx%,%gety%, 2

}


if ErrorLevel=1

{

MsgBox,인식불가

}

return



  여기서 A_ScreenWidth는 자신의 컴퓨터의 해상도 x좌표이며, A_ScrrenHeight는 y좌표입니다. 그러므로 0 ,0부터 자신의 해상도까지 13의 이미지를 찾게 됩니다. 즉, 다시 말해서 바탕화면 전체를 스캔하는 거죠.


if ErrorLevel=0은 이미지를 찾는다면 실행할 명령어이고, if ErrorLevel=1은 이미지를 못 찾았을 때 실행되는 명령어입니다.





저는 스크립트와 이미지를 같은 폴더에 위치시켰고, 13의 이미지는 내 컴퓨터 파일 이미지입니다. 


정리하게 되면


ImageSearch, getx, gety, 0,0, A_ScreenWidth, A_ScreenHeight, *40 파일명. PNG


Insert키를 누르면 스크립트가 시작되며,


이미지를 0,0부터 자신의 해상도(저는 1920 x 1080)까지 이미지를 검색하고 그 이미지의 좌표를 getx와 gety에 저장합니다.


if ErrorLevel=0

{

MouseClick, Left, %getx%,%gety%, 2

}


if ErrorLevel=0은 찾았을 때이므로, 이미지를 찾는다면 getx, gety의 좌표에 가서 마우스 왼쪽 더블클릭합니다.


if ErrorLevel=1은 찾지 못 했을 때이므로, 찾지 못한다면 " 인식 불가 "라는 메시지 창들 내보냅니다.