오토핫키(AutoHotKey) 기초강좌 #4 - 매크로 프로그래밍 2 (ImageSearch, Send, Sleep)




 전체 강좌

 1강 - 오토핫키(AutoHotKey) 소개

 2강 - 프로그래밍의 시작, GUI 만들기

 3강 - 매크로 프로그래밍 1 (Button, Loop, if 사용법)

 4강 - 매크로 프로그래밍 2 (ImageSearch, Send, Sleep)

 5강 - 매크로 프로그래밍 3 (Gui Submit)

 6강 - 매크로 만들기 응용 1 (if 응용, CoordMode)

 7강 - 매크로 만들기 응용 2 (핫키, if 응용)

 8강 - 매크로 만들기 응용 3 (While, GUI와 변수의 활용 1)

 9강 - 매크로 만들기 응용 4 (GUI와 변수의 활용 2)

 10강 - 매크로 만들기 응용 5 (함수1)

 11강 - 매크로 만들기 응용 6 (함수2)

 12강 - 매크로 제작 예제
















안녕하세요~ 킴영감입니다.


지난시간에는 ButtonLoop, if를 사용해서 매크로의 틀을 만들어 봤습니다.


프로그래밍을 처음 접하시는 분들에게는 생소하기때문에 어려울 수 있겠지만 아주 기초적인 내용이기 때문에 반드시 모두 이해하시고 넘어오셔야 합니다.


그럼 네번째 강좌를 시작하겠습니다.


오늘은 매크로를 만드는데 가장 중요한 이미지를 찾고 마우스를 클릭하는 코드를 작성할 것입니다.


우선 SciTE를 실행시켜 지난시간까지 작성했던 코드를 불러옵니다. 오늘 작성하는 코드는 모두 아래 그림의 빨간색으로 표시된 부분에 작성합니다.



1. 이미지 찾기

이미지를 찾기 위해서는 우리가 찾기 원하는 이미지를 24비트 BMP 파일로 저장을 해 놓아야 합니다. 스크린샷을 찍은 다음 그림판에서 원하는 버튼 그림을 잘라서 이미지로 저장하시면 됩니다. 단 그림의 왼쪽 상단을 클릭하기 때문에 왼쪽 상단은 반드시 버튼 안에 위치해야 합니다.

이미지 파일이 있는 폴더와 이미지 파일명은 공백이 포함되어서는 안되며 한글은 사용가능합니다.


3개의 이미지 파일의 파일명을 "1.bmp", "2.bmp", "3.bmp"라고 하겠습니다.

우선 이미지를 찾는 코드를 설명드리겠습니다.


 ImageSearch, x좌표 변수, y좌표 변수, 0,0, A_ScreenWidth, A_ScreenHeight, 옵션 + 파일위치 + 파일명 


위 내용만으로는 조금 어렵게 느끼실 것 같습니다. 하지만 모두 똑같은 방법으로 쓰기 때문에 두려워하실 필요 없습니다. 한번 성공하면 복사해서 붙여넣으면 됩니다.


코드를 풀어서 써보면

ImageSearch, 찾은 이미지의 x좌표 값을 저장할 변수, 찾은 이미지의 y좌표 값을 저장할 변수, 이미지를 찾을 시작점의 x좌표, 이미지를 찾을 시작점의 y좌표, 이미지를 찾을 끝점의 x좌표, 이미지를 찾을 끝점의 y좌표, 옵션 + 파일위치+파일명

이렇게 표혈할 수 있습니다.

"0, 0, A_ScreenWidth, A_ScreenHeight"은 모니터 화면 전체에서 찾기원할때 쓰시면 됩니다.


ImageSearch를 실행하면 ErrorLevel이라는 값을 돌려줍니다. ErrorLevel이미지를 찾았을 경우 0, 못찾았을 경우 1의 값을 가집니다. 이 값을 사용해 찾기 원하는 이미지를 찾았는지 판단하게 되며, 이전시간에 배운 if를 이용해서 코드를 작성할 수 있습니다.


그럼 1번이미지를 찾는 코드를 함께 작성해보겠습니다.



빨간색 박스로 표시한 부분이 지난시간에 작성한 코드에 추가한 부분입니다.

찾은 이미지의 x좌표와 y좌표 값을 저장할 변수이름FoundXFoundY로 사용했습니다. (똑같이 사용하시면 됩니다.)

옵션과 파일명을 적는 부분에 *50정확도를 의미합니다. 숫자가 커질수록 정확도가 떨어지고 비슷한 이미지를 찾는 경우가 발생합니다. 반면에 숫자가 너무 적어질 경우에는 이미지를 못찾는 일이 발생할 수 있습니다. 30~50의 값이 가장 적당하며 바꿔가면서 테스트 해보시면 됩니다.

파일경로를 표시하는 부분에 %A_ScriptDir%는 오토핫키 스크립트가 있는 폴더를 의미합니다. "C:\Image\1.bmp"처럼 절대 경로를 적어도 되지만 스크립트가 있는 폴더 아래에 이미지를 저장하는 것이 편할 것 입니다.



2. 마우스 클릭과 Sleep

오토핫키는 매크로를 만들기위한 너무나도 다양한 기능들을 제공합니다. 

하지만 우리는 초보단계이기 때문에 Send만을 사용해서 매크로를 만들 것입니다. Send마우스와 키보드 입력을 할 수 있는 명령어이며 사용방법을 익혀 두시면 아주 유용하게 사용하실 수 있습니다.

우선 사용법을 알려드리겠습니다.


 Send {기능 + 옵션}


간단하죠??


그럼 함께 코드를 추가해 봅시다.



우리가 원하는 기능은 마우스 클릭이며 Click으로 표시됩니다. 옵션을 적는 부분에 클릭할 좌표를 입력하면 되고 우리는 찾은 이미지의 좌표를 FoundX와 FoundY라는 변수에 저장해 놓았기 때문에 %FoundX% %FoundY%라고 적으면 됩니다.


마지막으로 Sleep에 대해서 설명드리겠습니다.

Sleep은 대기하는 시간을 의미하며 아래와 같이 쓰시면 됩니다.


 Sleep, 대기시간


대기시간은 ms 단위입니다. 


이것으로 모든 설명을 마쳤습니다. 

천천히 따라오신분은 "의외로 쉬운데?"라고 느끼셨을 것입니다.

그럼 마지막으로 정말 쉽다는 것을 보여드리겠습니다.


아래의 그림을 보시면 빨간 박스로 표시한 부분이 "2.bmp"와 "3.bmp" 이미지를 찾아서 클릭하는 부분입니다. 

복사해서 붙여놓고 파일이름만 바꿨습니다.

참 쉽죠??



이렇게 해서 클리어 횟수 카운팅을 제외한 완전히 기초적인 매크로 프로그램 만들기를 마쳤습니다.


아주 간단하게 끝날 수 있는 이유는 던전만 반복해서 도는 기능만 구현하면 되기 때문입니다. 

하지만!! 여기서 만족할 수는 없죠?? 

다음강의 부터는 응용에 들어가겠습니다!!


우선 오늘까지 배우신 내용을 완벽하게 숙지하시기 바랍니다. 특히 if의 사용방법을 완벽하게 이해하셔야 응용을 하실수 있습니다.



한가지 말씀드리면 현재 많은 사람들이 사용하고 있는 게임 매크로는 오늘까지 배운 내용만 가지고도 구현이 가능합니다. 단 프로그래밍이 어떤 것인지를 이해하고, 2강에서 작성한 순서도를 그릴 수 있으며, Loop와 if의 사용법을 완벽하게 숙지하고 있어야 합니다. 다르게 말하면 Loop와 if만 알면 아무리 복잡한 프로그램이라도 만들 수 있다라고 할 수 있습니다.


제 강좌를 보시는 초보자분들은 절대 좌절하지 마시고 1~4강을 차근차근 따라하면서 익히시기 바랍니다.

익숙해 지면 또다른 재미를 맛보실 수 있을 것입니다.


이상으로 네번째 강좌를 마치겠습니다.

블로그 이미지

킴영감

프로그래밍과 게임공략, 게임과 관련된 프로그램에 대한 내용을 다룹니다.

댓글을 달아 주세요

  • 이전 댓글 더보기
  • 김태훈 2018.08.28 14:29  댓글주소  수정/삭제  댓글쓰기

    시작버튼을 눌러도 전혀 반응이 없습니다

    사진 파일크기나 뭐 이런거에 문제가 있을수 있을까요?

  • 프리스케이터 2018.10.11 10:38  댓글주소  수정/삭제  댓글쓰기

    Gui, Add, Text, x30 y5 w110 h20, 매크로프로그램
    Gui, Add, Text, x60 y25 w50 h20 vA, 준비!!!
    Gui, Add, Text, x60 y50 w50 h20, 0회
    Gui, Add, Button, x20 y80 w110 h20, 시작
    Gui, Add, Button, x20 y110 w110 h20, 종료
    Gui, Show

    매크로시작 := false
    return
    Button시작:
    {
    매크로시작 := true
    Loop
    {
    ;여기에 무한 반복할 작업의 코드를 작성합니다.
    ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 %A_ScritptDir%\Image\1.bmp
    if (ErrorLevel = 0)
    {
    ;여기에 이미지를 찾았을 때 마우스를 클릭하는 코드가 들어갑니다.
    Send {Click %FoundX% %FoundY%} ;찾은 좌표를 클릭합니다.
    Sleep, 1000 ; ms 단위입니다.
    }
    ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 %A_ScritptDir%\Image\2.bmp
    if (ErrorLevel = 0)
    {
    ;여기에 이미지를 찾았을 때 마우스를 클릭하는 코드가 들어갑니다.
    Send {Click %FoundX% %FoundY%} ;찾은 좌표를 클릭합니다.
    Sleep, 1000 ; ms 단위입니다.
    }
    ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 %A_ScritptDir%\Image\3.bmp
    if (ErrorLevel = 0)
    {
    ;여기에 이미지를 찾았을 때 마우스를 클릭하는 코드가 들어갑니다.
    Send {Click %FoundX% %FoundY%} ;찾은 좌표를 클릭합니다.
    Sleep, 1000 ; ms 단위입니다.
    }
    if(매크로시작 = false)
    {
    break
    }
    }
    }
    return

    Button종료:
    {
    매크로시작 := false
    ExitApp
    }
    return

  • 2018.10.14 16:56  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 킴영감 2018.10.15 01:01 신고  댓글주소  수정/삭제

      보석이 나타났다 사라지는 속도가 빠르다면 오토핫키에 구현되어있는 이미지서치의 속도가 못따라갈 수 있습니다.
      유튜브 강의를 보신다면 제가 배포하고있는 EKMLib에 구현된 이미지서치를 사용하시면 조금 더 빠른 이미지서치가 가능하니 참고하시면 좋을 것 같습니다.^^

  • 질문있습니다 2018.11.21 00:21  댓글주소  수정/삭제  댓글쓰기

    안녕하세요? 좋은글 감사합니다.
    보면서 열심히 공부중인데요. 분명히 문법으로는 맞는거같은데 동작이 안하는게 있는데 질문드려도 될까요?

    F1::
    send {Enter down}
    sleep 2000
    send {Enter up}
    send a
    return

    위와같은 테스트용 코드를 작성했습니다.
    그리고 테스트를위해 위의파일(.ahk)를 관리자 권한으로 실행하고, 메모장을 켠 후 F1을 눌렀습니다.

    줄바꿈을 2초간하다가 a를 입력하고 종료할 것이라고 예상을 했었는데, 실제로는 딱 1번만 줄바꿈을 하고 2초후 a를 입력합니다.
    (Enter이외에 다른것을해도 다 1번씩만 입력을합니다.)

    문법상으로는 아무문제가 없는것 같은데 환경이 문제일까요?
    오토핫키의 버전은 v1.1.30.01을 사용하였고 컴퓨터는 windos7 64bit입니다.

    (그리고 혹시 몰라서 컴파일을하여 exe파일로 만든후 실행또는 관리자실행을 하여도 위와 결과가 같습니다.)

    답변 부탁드리겠습니다...

    • 킴영감 2018.11.21 10:05 신고  댓글주소  수정/삭제

      메모장에서는 그렇게 동작하는게 맞을겁니다.
      윈도우가 어떻게 구성되었냐에 따라서 입력이 동작하는 방식이 달라질 수 있습니다.^^

    • 질문있습니다 2018.11.21 16:35  댓글주소  수정/삭제

      답변 감사드립니다.
      이게 맞는거였군요..ㅠㅠ 다시 처음부터 차근차근 공부해봐야겠습니다. 좋은하루되세요^^

  • 감사드립니다 2018.11.23 11:40  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 글이 도움이 많이 되네요! 감사합니다
    혹시 실례가 안된다면 질문 해도 될까요?

  • 2018.11.23 14:49  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  • 2018.11.28 12:13  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 킴영감 2018.11.28 15:14 신고  댓글주소  수정/삭제

      잘못 알고 계십니다.
      기본적인 개념이 안잡혀 있으신 것 같네요.
      지금 해답을 드리는 것 보다 유튜브 가셔서 기초강의를 정독하시는게 좋을 것 같습니다.^^

  • ㅇㅇ 2018.11.28 19:48  댓글주소  수정/삭제  댓글쓰기

    return

    Button시작:
    {
    매크로시작 := true
    Loop
    {
    {
    sleep,4000
    Send,{w}
    }
    ImageSearch, OutX, OutY,0,0, A_ScreenWidth, A_ScreenHeight, *25 C:\Users\windows10\Desktop\asdasd\123.bmp
    if (ErrorLevel=0)
    {
    Sleep,100
    Send,{W %OutX%,%OutY%}
    }
    if (매크로시작 = false)
    {
    break
    }

    }

    }
    return

    Button종료:
    {
    매크로시작 := false
    ExitApp

    }
    return
    어떤부분이 잘못된건가요? 개념이안잡혀다하셨는데... 지적좀요 이미지서치만안될뿐 나머지부분은 다작동되요...

    • 킴영감 2018.11.28 20:26 신고  댓글주소  수정/삭제

      혹시 유튜브에 댓글 남기신 분인가요?
      우선 이미지서치는 찾을때까지 기다리는게 아니고 한번만 찾는거고 Loop가 반복되는거라서 반복적으로 찾는겁니다.
      그리고 Send, {W %OutX%, %OutY%} 이건 어디서 나온건가요?
      명령어는 사용방법이 정해져있고 그 사용방법에 따라서 사용해야합니다.
      틀릭 방법으로 사용하니까 이미지를 찾더라도 w를 못누르는 상태인거죠.
      찾을 이미지가 떠있을 때 프로그램을 실행시켜서 이미지를 찾는지부터 확인하시고
      제 생각에는 Sleep, 4000 이부분 때문에 이미지를 한번 찾으면 4초동안 쉬어서 이미지를 못찾는 것 같네요.
      이전에도 말씀드렸지만 여기서 멈추시고 유튜브에 있는 기초강의를 이해가 될때까지 보시기 바랍니다.
      지금 상황이 유지된다면 원하는 프로그램을 완성하는데 훨씬 더 많은 시간이 들겁니다.^^

  • ㅇㅇ 2018.11.28 20:09  댓글주소  수정/삭제  댓글쓰기

    제발도와주세요 ㅠㅠㅠㅠ

  • ㅇㅇ 2018.11.28 20:43  댓글주소  수정/삭제  댓글쓰기

    아뇨 구독만했어요...
    제가 생각하는대로 만들었는데 3초> w클릭>이미지서치후>w
    이런식으로해서 작성한코드인데 틀렸나보네요 ㅠ그리고 out은 그부분은 아무글자나넣어도된다시길래..
    그런거에요 ㅠ

    • 킴영감 2018.11.28 20:54 신고  댓글주소  수정/삭제

      Send 명령어의 사용법을 모르시니까 이런 스크립트가 나온다는겁니다.^^
      그리고 변수의 이름을 정할 때 아무거나 써도 된다는거지 Send 명령어 뒤에 아무거나 써도 된다는 말이 아니구요.
      그리고 프로그램 구조를 만드는 방법을 모르시니까 원하는대로 만들 수 없는거구요.
      지금 상황은 제가 해법을 알려드릴 수 있는 상황이 아니고 대신 만들어 드려야 되는 상황입니다.
      그러니 유튜브에 있는 강의를 보시라는겁니다.^^
      지금 만들어놓은 코드를 해석해보면
      4초>w입력>이미지서치로 이미지를 찾으면 w(이부분은 Send, w로 고치세요) 못찾으면 그냥 넘어감>다시 4초>w입력>이미지서치...
      이게 무한반복되도록 만들어놓으신거구요
      찾을 이미지가 계속 떠있는게 아니라면 이미지를 못찾는게 아니라 타이밍이 안맞는 것 같습니다.

  • ㅇㅇ 2018.11.28 21:14  댓글주소  수정/삭제  댓글쓰기

    그타이밍이 랜덤이라그래서 이미지서치를한건데... 그래서 send,{w 좌표넣었어요}
    그냥 좌표빼고해야하나요?

  • ㅇㅇ 2018.11.28 21:51  댓글주소  수정/삭제  댓글쓰기

    좌표다빼고 넣었는데도 안되네요

  • 루키 2018.11.30 10:24  댓글주소  수정/삭제  댓글쓰기

    Button시작:
    {
    매크로시작 := true
    Loop
    {
    ImageSearch, vx, vy, 0,0, A_ScreenWidth, A_ScreenHeight, *25 C:\Users\windows10\Desktop\image\1.bmp
    if (ErrorLevel = 0)
    {
    send {MouseMove %vx% %vy%}
    sleep,1000
    }
    if (매크로시작 = false)
    {
    break
    }
    }

    }
    return

    Button종료:
    {
    매크로시작 := false
    ExitApp
    click 대신 mousemove 를넣어서 응용해봤습니다
    그런데 인식이안되네요... 어디가 문제인가요?

  • 2019.01.02 22:51  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  • 궁금합니다. 2019.01.14 07:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 킴영감님이 말씀하신것 처럼 24비트 bmp 파일을 윈도우 캡쳐도구로 캡쳐 후 그림판으로 저장했습니다.
    근데 문제가 있는게,
    1. 그 중 몇몇 파일은 폴더내에서 찾아내기는 하는데, 한개 파일은 못찾네요.
    2. 폴더 내에서 찾을 수 있는 파일을 게임에 적용해보면 하나 정도만 찾게 되네요.

    혹시 제가 따로 스크린에 대한 정보라던가 어떤 좌표를 저장해둬야 하는걸까요?

    듀얼 모니터를 쓰다가 혹시나 싶어서 지금은 모니터 하나만 쓰고 있습니다.

    ++방금 그림을 엄청 크게 키워놓고 다시 테스트해보니 서치 안되던 그림이 찾아지네요. 이런 경우는 뭣때문일까요?

    • ㅇㅇ 2019.01.16 06:35  댓글주소  수정/삭제

      윈도우 캡쳐 도구를 이용하는 대신 전체 스크린캡쳐 후에 부분을 잘라내서 사용하니깐 되네요.

  • 이미지서치 우선순위 해결좀 해주세요 2019.01.29 18:48  댓글주소  수정/삭제  댓글쓰기

    button이미지:
    {
    매크로상태 := true
    CoordMode, mouse, screen
    coordmode, pixel, screen
    gui, submit, nohide
    loop, %제한%
    {
    guicontrol, , 횟수, %a_index% 번

    imagesearch, outpx, outpy, 0, 0, A_ScreenWidth, A_ScreenHeight, *50 img\하프.bmp
    if (ErrorLevel = 0)
    {
    click %outpx%, %outpy%

    }
    else
    {
    imagesearch, outpx, outpy, 0, 0, A_ScreenWidth, A_ScreenHeight, *10 img\콜.bmp
    if (ErrorLevel = 0)
    {
    click %outpx%, %outpy%
    sleep, 2000
    }
    }
    if(매크로상태 = false)
    {
    break
    }
    }
    }
    return

    1년전 킴영감님을 알게되어 3개월쯤 열심히 공부했는데 이미지서치 우선순위에 벽에 부치쳐
    해결을 못하고 포기하다 요즘 킴영감님의 새로운 영상이 많이 올라와서 저도 다시 열심히 공부하고
    싶은데 이미지서치 우선순위가 너무 어렵내요ㅠㅠ
    내용인즉 이미지가 동시에 나올때도 있고 따로 나올때는 있는데 스크립트의 내용되로 실행하면
    성공확률이 70% 이상이 절대 안되내요 이미지가 따로 나올때는 문제가 없는데 동시에 나오면
    우선순위가 잘 안되내요 우선순위 되로 실행하고 싶어서 셋트타이머, goto 등 별짖 다해봤는데 항상
    제자리내요ㅠㅠ 그래서 저 개인적인 생각에 키매크로프로그램 처럼 여러 라벨이 동시에 실행이 되고
    이미지나 픽셀을 찾기전에 sleep로 시간적 액션을 주면 우선순위가 정확히 찾아지던데 오토핫키에서
    여러 라벨을 동시에 실행이 되는 명령어나 함수가 없는건가요 7개의 이미지 우선순위를 정해야 하거든요
    이 문제를 빨리 해결해서 adb를 공부하는게 저의 큰 바램입니다.
    항상 킴영감님에게 감사하게 생각하고 ekmlib 유료화 잘되길 기대해 봅니다.

    • 킴영감 2019.01.30 13:52 신고  댓글주소  수정/삭제

      스크립트를 보니 하프가 우선인가보네요.
      우선순위가 높은 요소를 작성해놓으신 것처럼 위에 놓으시면 되는게 맞고 성공확률이라는게 두 이미지가 동시에 나왔을때를 말하는 것 같네요.
      콜이 먼저나오고 하프가 나오는데 하프가 나오기전에 콜 이미지서치를 하게되면 실패하게 되는 상황인 것으로 파악되는데 맞나요?

  • 이미지서치 우선순위 해결좀 해주세요 2019.01.31 19:58  댓글주소  수정/삭제  댓글쓰기

    네 하프가 우선이고 이미지가 동시에 나올때 우선순위가 중요합니다 만약 콜이 먼저 나오면 콜을 실행하는건
    상관 없습니다.
    이미지가 따로 나올때는 아무문제 없습니다 이미지가 정확히 동시에 나올때 우선순위가 너무 중요하거든요
    제가 킴영감님에게 배운봐로는 스크립트가 위에서 아래로 돌면서 그 스크립트가 콜을 만나면서 실패를 하는거 같아요 그래서 제가 오토핫키를 배우기전 키매크로를 사용했는데는 전혀 문제가 안되는데 모든 명령어가 동시에 실행되기 때문에 이미지를 검색하기전 SLEEP로 간단히 해결되거든요 1년동안이나 이 문제를 해결못하니 너무 속상하내요ㅎㅎ
    이문제를 해결하고 킴영감님의 강좌를 빨리 딸아가고 싶내요.^^

    • 킴영감 2019.02.01 21:12 신고  댓글주소  수정/삭제

      동시에 나올때가 문제라면 콜 이미지를 찾았을 때 검증하는 부분을 추가하면 되겠네요.
      만약 두 이미지가 동시에 나왔는데 프로그램은 콜이미지를 찾는 부분이 동작되고 있다면 우선순위를 안지키는 문제가 발생하는 거겠죠.
      콜 이미지를 찾았을 때 하프 이미지가 있는지 한번 더 찾고 있으면 하프를 누르고 없으면 콜을 누르는 방식으로 만들면 말씀하신 부분을 해결할 수 있을 것 같습니다.

  • 깡보더 2019.02.27 16:31  댓글주소  수정/삭제  댓글쓰기

    요즘 오토핫키에 대한 강의 내용에 재미 있습니다. 다름 아니라 녹스플레이어에서는 이미지서치후 send {Click %FoundX% %FoundY} 등 키보드나 마우스 입력이 되는데 LDplayer(구 모모)에서는 send, mouseclick 등 키보드, 마우스 입력이 되질 않네요. 이미지서치 부분은 Msgbox, FoundX% %FoundY% 확인 결과 제대로 찾습니다. 혹시 애뮬레이터마다 키보드, 마우스 입력 차이가 있는건가요?

  • 오우야 2019.03.14 14:24  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 만약 찾는 이미지가 한 화면에 2개 이상 있다면 변수 설정을 다르게 해야하는 건가요? 알려주세용

  • 김재선 2019.09.04 16:05  댓글주소  수정/삭제  댓글쓰기


    GUI, ADD, TEXT, X30 Y5 W110 H20, 매크로 프로그램
    GUI, ADD, TEXT, X60 Y25 W50 H20 VA, 준비!!!
    GUI, ADD, TEXT, X60 Y50 H20 W60 VB, 0회
    GUI, ADD, BUTTON, X20 Y80 W110 H20, 시작
    GUI, ADD, BUTTON, X20 Y110 W110 H20, 종료
    GUI, SHOW

    매크로시작 : = false

    return

    Button시작:
    {
    Gui, Submit,NoHide
    GuiControl, , a, 시작

    매크로시작 : = true
    Loop
    {
    ;여기에 무한 반복할 작업의 코드를 작성합니다.
    ImageSearch, FOUNDX, FOUNDY, 0,0, A_SCREENWIDTH, A_ScreenHeight,*50 %A_ScriptDir%\IMAGE\1.BMP
    if (ERRORLEVEL = 0)
    {
    Send {Click %FOUNDX% %FOUNDY%} ; 찾은 좌표를 클릭합니다.
    Sleep, 1000 ; ms 단위입니다.
    }
    ImageSearch, FOUNDX, FOUNDY, 0,0, A_SCREENWIDTH, A_ScreenHeight,*50 %A_ScriptDir%\IMAGE\2.BMP
    if (ERRORLEVEL = 0)
    {
    Send {Click %FOUNDX% %FOUNDY%} ; 찾은 좌표를 클릭합니다.
    Sleep, 1000 ; ms 단위입니다.
    }
    ImageSearch, FOUNDX, FOUNDY, 0,0, A_SCREENWIDTH, A_ScreenHeight,*50 %A_ScriptDir%\IMAGE\3.BMP
    if (ERRORLEVEL = 0)
    {
    Send {Click %FOUNDX% %FOUNDY%} ; 찾은 좌표를 클릭합니다.
    Sleep, 1000 ; ms 단위입니다.
    }

    if(매크로시작 = false)
    {
    break
    }
    }

    }
    return

    ButtON종료:
    {
    매크로시작 : = false
    ExitApp
    }
    return




    >"C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "C:\Users\kimjaesun\Desktop\매크로실습.ahk"
    C:\Users\kimjaesun\Desktop\?????.ahk (9) : ==> This line does not contain a recognized action.
    Specifically: ????? : = false
    >Exit code: 2 Time: 0.1265

    생초보다보니 화면에 있는 그대로 했습니다

    이미지같은것도 저장하지 않았습니다

    처음 1단계에서 나오는 시작 종료 창 자체가 활성화 되지않습니다

    제가 아무것도 모르다보니 설명 될지 모르겠습니다

    무엇이 문제인지 알려주시면 성심성의것 해보겠습니다