19 - [오토핫키] ImageSearch

    인터넷에 많은 매크로 프로그램들이 있는데 굳이 오토핫키를 배우려는 이유가 아닐까 생각 됩니다. 그만큼 이미지 서치는 오토핫키의 막강한 기능이며 유용한데 저 같은경우엔 가능한 이미지 서치를 넣지 않고 스크립트를 짭니다. 왜냐면 이미지 파일들 때문에 폴더가 상당히 지저분 해지고, 해상도가 다른 컴퓨터에서는 작동을 안하는 등 각종 부작용이 있기 때문입니다. 그럼에도 불구하고 이미지 서치는 굉장히 유용한 기능이 분명합니다.

    이미지를 캡쳐 할때는 가능한 작고 다른 부분과 동일하지 않은 특징이 있는 부분을 따고 확장자는 bmp로 해야 인식률이 높습니다. 또한 이미지 서치 범위를 작게 할수록 속도가 더 빠릅니다.

     

     

     

    문법

    ImageSerch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ImageFile

     

    설명

    OutputVarX/Y

    이미지가 발견된 좌측 상단의 좌표를 저장할 변수

    X1, Y1

    검색할 좌측 상단의 시작 좌표, 표현식 가능

    X2, Y2

    검색할 우측 하단의 끝 좌표, 표현식 가능

    ImageFile

    이미지 파일의 이름, 경로를 지정하지 않으면 같은 폴더에 있다고 인식 합니다.

    Option을 지정 할 수 있는데 *n (변형)에 대해서만 설명 합니다.

     

     

    예제

    예제1)

    F1::

    ImageSearch, vX, vY, 97, 211

      , 131, 236, *50 1.bmp

    If (Errorlevel = 0)

    MouseClick, L, vX, vY

    ImagESearch, vX, vY, 0, 0

      , A_ScreenWidth, A_ScreenHeight, 2.bmp

    ;A_ScreenWidth, A_ScreenHeight는 내장 변수

    If (Errorlevel = 0)

    MouseClick, L, vX, vY

    Return

    예제2)

    F1::

    Loop

    {

      ImageSearch, vX, vY, 0, 0

        , A_ScreenWidth, A_ScreenHeight, 3.bmp

      If (Errorlevel = 0)

      {

        MouseClick, L, 113, 194, , 0

        MouseClick, L, 154, 225, , 0

        MouseClick, L, 75, 225, , 0

        MouseClick, L, 193, 272, , 0

        Break

      }

    }

    return

     

     

      1.bmp

     

      2.bmp

     

      3.bmp

     

     

    * 저는 포스팅의 레이아웃을 통일하기 위해 이미지 서치를 두줄로 나눠 썼지만 한줄로 작성하기 바랍니다.

     

    저는 윈도우7이며 계산기를 예제로 사용했습니다. 예제1은 1.bmp를 이미지 서치 하는데 파일명 앞에 *50 이 보이시나요? 이것이 변형에 관한 Option입니다. 0~255까지 숫자를 지정하면 픽셀 컬러에 대한 오차를 허용합니다.(1픽셀이라도 모양이 다른것은 허용이 안됩니다.) 계산기의 1.bmp는 6의 일부분을 캡쳐 했으며 2.bmp는 3의 일부분을 캡쳐 했습니다. 이렇게 최대한 작은 이미지로 해줘야 속도가 빨라져요.

    그리고 2.bmp를 찾을때 범위를 보면 내장 변수가 사용되었습니다.

    따라서 A_ScreenWidth는 모니터의 가로 픽셀수, A_ScreenHeight는 모니터의 세로 픽셀수. 제 경우엔 모니터의 해상도가 1920, 1080이기 때문에 이 값이 입력 됩니다. 또한 If (Errorlevel =0)이라는 부분을 볼 수 있는데 Errorlevel또한 내장 변수로써 이미지를 찾았을 경우 0, 이미지를 못찾았으면 1, 이미지 파일이 없으면 2가 설정 됩니다. If (Errorlevel=0)은 "이미지를 찾으면" 이랑 같은 의미 입니다. 이렇게 이미지를 찾아 좌표를 변수로 지정하고 그 변수를 클릭하도록 해서 계산기에 63이라는 숫자를 입력 할 수 있어요.

    예제2는 이미지를 찾을때까지 반복하는 스크립트입니다. 3.bmp는 계산기 아이콘을 캡쳐 했어요. 계산기를 종료하고 "F1"을 눌러 스크립트를 구동하면 아무일도 일어나지 않습니다. 그러나 계산기를 실행 해보면 곧바로 9*5를 계산하여 45라는 출력 결과를 얻습니다. 이를 응용하면 자동로그인 같은걸 만들 수 있겠죠?

     

    내장 변수란? "변수이긴 하나 사용자가 변수를 지정하는 것이 아닌 컴퓨터가 변수값을 입력해놓는 것을 의미합니다." 일반적으로 A_ 로 시작하는 경우가 많습니다.

     

     

     

     

     

    Posted by 옹봉이