오토핫키 4강 :: 이미지서치가 뭐야?

오토핫키 4강 :: 이미지서치가 뭐야?

카테고리 : 오토핫키/오토핫키 강좌

오토핫키 4강 :: 이미지서치가 뭐야? 씹어먹는거야?
벌써 오토핫키에 대한 강좌를 4강이나 진행하게 되었습니다.
사실 아직 얼마나 많은 분들이 이러한 글을 읽으시는지 알 수 없으나
어떤분에게든 조그마한 보템이 될까하는 마음으로 강좌를 써내려 갑니다.

오토핫키의 입문에서 기본으로 넘어가는 과정에서 이미지서치는 매우 중요하다 감히 말할 수 있습니다.
무언갈 응용해보려면 이미지서치라는 녀석이 상당히 중요해지거든요.

그렇다면 아직 이해가 안가는 이미지 서치라는 녀석에게 다가가기 전에 혹여 전강의를 안보신 분들을 위해서 링크를 남겨봅니다.
지난강의



본격적으로 시작해볼까요?

이미지서치를 이용해보자!


명령문 : ImageSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ImageFile
A라는 모양의 이미지를 어떠한 화면에서 찾고 싶을때 사용하는 명령문이죠.
먼저 명령문을 분석해 보겠습니다.
ImageSearch(이미지를 찾으라는 명령어죠)
OutputVarX or Y라는 것은 찾은 이미지의 좌표값을 도출해내기 위한 변수 값입니다.
따라서 저는 주로 이부분에 vX,vY라고 적습니다.
X1,Y1,X2,Y2는 검색할 범위 입니다. 현재는 모니터를 기준이 중점이 되겠죠?
모니터를 기준으로 1,1,1024,768 이라면 왼쪽제일 끝 1이라는 픽셀에서 부터 1024,768이라는 좌표까지 검색하겠단 소리겠네요.
만약 모니터 전체를 기준으로 하고 싶으시다면 1,1, A_ScreenWidth, A_ScreenHeight 라고 적으시면 됩니다.

ImageFile은 이제 이미지를 검색할 파일입니다. A라는 모양의 이미지가 a.jpg라면 이부분에 a.jpg라고 적으시면 됩니다.
물론 이럴경우! 이미지랑 스크립트가 같은 폴더내에 있어야겠죠?
이미지 파일부분의 옵션은 다음과 같습니다. 1. *(숫자) 예를 들어 범주 값입니다. 검색하고자 하는 이미지와 아주 닮았으면 좋겠지만, 스크린샷등의 이미지 카피나 창에서 이미지 도출은 오차값을 생성하게 됩니다. 그래서 오차값만큼의 숫자를 임의적으로 주게되는 것이죠.

ImageSearch,vX,vY,1,1, A_ScreenWidth, A_ScreenHeight,*50 a.jpg 라고 쓰게 되겠네요.
숫자가 크면 클 수록 오차값이 커지기 때문에 엉뚱한 이미지가 검색이 되거나 이미지 검색속도가 늦어질 수 있어요. 또한 검색하고자 하는 이미지가 작을 수록 효과는 빠르다는 사실~

자! 이제는 실전입니다. 실전스크립트 날려드려요~

end::exitapp

Insert::reload

Home::


loop
{
imagesearch,vX,vY,1,1,100,100,*10 a.bmp ; 1,1좌표에서 100,100좌표까지 a.bmp를 10만큼의 오차값으로 검색한다.
if errorlevel = 0 ; 이미지를 찾았을 때 라는 조건문입니다. if를 통해서 조건문을 제시하고 errorlevel = 0 어떠한 명령어에대한 결과 값이 있을 때를 의미하죠.
{
msgbox,찾았다
sleep,1000
break ; loop문을 반복에서 멈추게 할때 사용합니다.
}
else or if errorlevel = 1 ; 이것은 else 찾지 않은 나머지의 경우 , errorlevel = 1 결과 값이 없을 때
{
msgbox, 못찾았다
sleep,1000
}
}
return 


위와 같은 스크립트는 이미지를 찾을 때까지 계속 이미지서치를 수행하다가 이미지를 찾으면 멈추는 스크립트입니다.
여기까지 손쉽게 따라오셨길 바랍니다. 이상으로 4강 이미지서치를 마치겠습니다.
언제나 당부드리지만 댓글은 힘입니다. 필요하실 때 어제든 댓글주시면 도움이 되어드릴게요.

저작자 표시 비영리 변경 금지
신고

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. Favicon of http://www.facebook.com/profile.php?id=100003234386827 BlogIcon 류정우 2012.04.15 22:09 신고  수정/삭제  댓글쓰기

    end::exitapp
    insert::reload
    home:

    loop

    {
    imagesearch,vX,vY,1,1,100,100,10 all

    if errorlevel = 0
    {
    msgbox, 성공
    sleep,1000
    break
    }

    else if errorlevel = 1
    {
    msgbox,실패
    sleep,1000

    }
    }
    return
    전 else or if errorlevel 치면 or if errorlevel 같은 거 없

  3. 위에 2012.04.19 00:49 신고  수정/삭제  댓글쓰기

    원하는글이었어요! 폰으로 누워서읽고있는데 빨리 테스트해보고싶고 응용해봐서 제가원하는 매클 만들고 싶고 그러네용^,^ 잘읽었습니다!!

  4. 한종석 2012.04.21 17:09 신고  수정/삭제  댓글쓰기

    Loop, 1
    CoordMode, Mouse, Screen
    Coordmode, Pixel, Screen
    {
    Loop,
    {
    sleep, 100
    ImageSearch, VX, VY, 0, 0, A_ScreenWidth, A_ScreenHeight, *10 1.bmp
    sleep, 100
    if Errorlevel = 0
    sleep, 100
    {
    Mousegetpos, GX, GY
    VX+=30
    VY+=8
    MouseClick, Left, %VX%, %VY%
    }
    eIse
    {
    ImageSearch, VX, VY, 0, 0, A_ScreenWidth, A_ScreenHeight, *10 1.bmp
    sleep, 100
    {
    Mousegetpos, GX, GY
    VX+=30
    VY+=8
    MouseClick, Left, %VX%, %VY%
    }
    }
    Break
    }
    Loop,
    {
    sleep, 100
    ImageSearch, VX, VY, 0, 0, A_ScreenWidth, A_ScreenHeight, *10 2.bmp
    sleep, 100
    If Errorlevel = 0
    sleep, 100
    {
    Mousegetpos, GX, GY
    VX+=30
    VY+=8
    MouseClick, Left, %VX%, %VY%
    }
    Else
    {
    ImageSearch, VX, VY, 0, 0, A_ScreenWidth, A_ScreenHeight, *20 2.bmp
    sleep, 100
    {
    Mousegetpos, GX, GY
    VX+=30
    VY+=8
    MouseClick, Left, %VX%, %VY%
    }
    }
    Break
    }
    여기서 Else 가 계속 오류납니다..Else if Errorlevel = 1 이렇게 해도 오류나고요...
    참...그리고 Break } 밑에 쭉 같은것들로만 더있으니까 오해하지 마시구용
    너무 길면 보기 힘드실까바.,..ㅎㅎ;;
    그리고 여기서 Else 들어갈수 있게끔 수정하면
    이게 Loop 1번으로 시작해서 끝날때까지
    Loop,1 안에 있는 Loop 반복해서 이미지 쭉 찾다가 찾으면 마우스 클릭되고 그다음으로 넘어가는 오토핫키 맞지요?

  5. 정우 2012.04.22 05:19 신고  수정/삭제  댓글쓰기

    wjddngudsla@네이트 친추점해주세요 궁금한게 있어요

  6. 2012.05.02 22:01 신고  수정/삭제  댓글쓰기

    이미지서치를 해서 그 이미지를 클릭하게 하고 50000을치구 엔터를 누르게 하고 이걸 반복하구 싶은데 소스 좀 알려주세요

  7. BlogIcon 강지완 2012.05.08 12:15 신고  수정/삭제  댓글쓰기

    어떤특정 그림을보고 클릭후 엔터 누르는것좀 짜주세요
    다른분들이 짠거 그대로넣어도 에러뜨네요 ㅜ

  8. BlogIcon 강지완 2012.05.08 12:15 신고  수정/삭제  댓글쓰기

    어떤특정 그림을보고 클릭후 엔터 누르는것좀 짜주세요
    다른분들이 짠거 그대로넣어도 에러뜨네요 ㅜ

  9. 위에 2012.05.10 16:05 신고  수정/삭제  댓글쓰기

    안녕하세요!! 오토핫키로 골머리 썩고있는 초보입니다 ㅠ
    제가만들고싶은 오토핫키는 이미지서치를 이용해서 이미지를 찾았을때 키보드 입력을 누르고, 자동으로 레디버튼을 마우스클릭하는건데요..
    이미지서치 예제스크립트를 읽다가 제가 많이 부족한 초보라서 짧은지식으로 충당할수 없게되어 이렇게 질문글을 남기게 되었습니다ㅠㅠ
    스트립트를 만들기전에 제집컴이 그렇게 사양이 좋진않아서.. 가볍고 원활하게 돌아가는 단순한 스트립트를 짜고싶은데요 지금부터 질문들어갈게요

    변수값은 왜 적어넣는건가요? 너무 초보같은 질문이라서 죄송합니다만..
    만약에 제가 이미지서치를 검색하는칸이 딱 한정이되있습니다(그칸은 화면의 반에 반도 안되는정도??) 그래도 변수값은 필요한건가요??
    그칸좌표만 검색할 범위에 지정해놓고서 이미지서치해서 이미지찾아내면 키보드 키누르는 거,, 만약 설정할수있게된다면 아무런 오류없이 잘 돌아갈련지 좀 못미더워서요 제 질문이 고수님이 보시기에 좀 어이없을수도 있으나 잘 알아먹을수있게끔 설명 부탁드립니다 ㅠㅠ
    그리고 인터넷을 뒤집어봤으나;; 해결못한 한가지가 있는데요. 제가 알고싶은 칸의 좌표를 뽑고싶은데 저의 지식상으론 컴퓨터 해상도만 간신히 알고있을뿐 아는게 하나도 없습니다 제가 임의로 클릭한 곳의 좌표를 얻을수있는 유틸리티나, 혹시 그런 스크립트가있으면 알려주시면 감사하겠습니다!
    그리고 이미지 서치값이 참일때 F1 키를 누른다 라는 스크립트와 특정이미지를 클릭하는 스크립트도 알려주신다면 많은 응용을 해볼수있겠습니다..
    제가 직접 오토핫키를 공부하며 제가 만들어보고싶은 맘에 질문이나 쓰잘때기 없는 서두가 너무 길었네요;;
    제가 너무 남의시간을 빼앗는것같아 죄송하지만 무릎쓰고서 꼭 답변을 부탁드리겠습니다!!

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.05.17 11:57 신고  수정/삭제

      질문이 너무나 눈에 안들어오네요 .. 음 .. 먼저
      변수값은 변수값을 적어넣음으로서
      실질적으로 뇌에서 작용하는 다양한 상황에 대한 반응을
      대신 대처하게 합니다.

      변수값은 찾을경우 찾지 못할 경우같은 알고리즘을 위해 작용합니다.
      이미지를 찾아내며 키보드를 누르는 거에는 살짝의 변수가 필요하지않을까요?
      이미지를 찾았을 경우 찾지 못할경우요.

      좌표값알아내는 방법은 간단합니다. 스크립트 추가해 드리겠습니다.

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.05.17 11:59 신고  수정/삭제

      setbatchlines,-1
      setcontroldelay, -1
      gui, add, text, x10 y10 w80 center, Screen Pos
      gui, add, text, x10 y30 w80 center vmouseposscreen
      gui, add, text, x10 y60 w80 center, Relative Pos
      gui, add, text, x10 y80 w80 center vmouseposrelative
      gui, add, text, x10 y110 w80 center, Pixel Color
      gui, add, text, x10 y130 w80 center vpixelcolor
      gui, show,, XY.P.COLOR

      loop
      {
      coordmode, mouse, screen
      coordmode, pixel, screen
      mousegetpos, x, y
      pixelgetcolor, pcolor, x, y
      coordmode, mouse, relative
      mousegetpos, x1, y1
      stringtrimleft, pcolor, pcolor, 2
      guicontrol, , mouseposscreen, %x%, %y%
      guicontrol, , mouseposrelative, %x1%, %y1%
      guicontrol, , pixelcolor, %pcolor%
      sleep, 50
      }
      return
      guiclose:
      exitapp
      return

  10. 로이 2012.05.19 09:36 신고  수정/삭제  댓글쓰기

    안녕하세요 ^^
    저는 다름이 아니라 게임 메크로를 만들고잇는데 물약을 %지에 따라서 먹게 하려구
    픽셀서치를 이용해서 짜려구햇는데 픽셀서치 컬러랑 좌표 찾기에서 좌표 찾기는 되는데 컬러찾기는
    자꾸 0x603030으로만 뜨네요.... 방법이 없을까요!? 그리구 두번쨰 질문은 이미지서치,키보드,마우스 입력
    이러한 함수들을 우선순위를 주는방법이요 예를 들면 xx이미지를 찾으면 o,o,k 키를 눌러라에서
    o,o눌럿는데 xx이미지가 사라지면 바로 다음 이미지를 찾는 /키를 눌러라 이런식으로용,,,
    부탁 드리겟습니다 ^^ 요즘즐거운 공부하고 잇어서 감사합니다 ^^

    • 로이 2012.05.19 09:39 신고  수정/삭제

      하나더 물어볼꼐 생겨서요~!!!!
      예를 들면 HP잇는곳 빨간색으로 가득 차잇을떄 컬러번호가
      xxxx다 라고 예를 들면 이곳에 HP가 딸아서 검은색이 됫을때 F6키를 눌러라 이런식의 스크랩을 짜주실수 잇으신가요?

  11. 로이 2012.05.19 20:51 신고  수정/삭제  댓글쓰기

    end::exitapp
    Insert::reload
    Home::

    loop
    {
    send,{/}
    sleep,1000
    ImageSearch,vX,vY,1,1,A_ScreenWidth,A_ScreenHeight, *transwhite *100 re.bmp
    if errorlevel = 0
    {
    send,{0}
    sleep,1000
    send,{k}
    sleep,1000
    send,{0}
    sleep,1000
    send,{k}
    sleep,1000
    send,{0}
    sleep,1000
    send,{k}
    sleep,1000
    send,{0}
    sleep,1000
    send,{k}
    sleep,1000
    send,{0}
    sleep,1000
    send,{k}
    sleep,1000
    }
    else if errorlevel = 1
    {
    send,{F8}
    sleep,1000
    }
    }
    return
    여기에 중간에
    re라는 이미지가 없어지면 o,k를 누르던걸 중지하고
    다시 /로 탐색하는 방법이 없을까요? 그리고 마지막에
    /을 3번더 누르고 난후 re가 검색이 안될때 F8을 누르는방법도 알려주세요 ^^

  12. 끄엉 2012.07.30 13:11 신고  수정/삭제  댓글쓰기

    마우스가 움직이다가 마우스모양이 바뀌면 마우스가 정지후 클릭하는 방식으로
    짤수 있나요? 컴퓨터가 마우스는 이미지로 생각안하는듯 싶어요//

  13. 김용남 2012.08.23 22:00 신고  수정/삭제  댓글쓰기

    F5::
    {
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 인벤.bmp
    if errorlevel = 0
    {
    mouseclick, left, 778, 65, 3
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 할매.bmp
    mouseclick, left, 692, 92, 4
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 확인.bmp
    clipboard = S
    send, {ctrl down}
    send, v
    send, {ctrl up}
    send, {enter}{enter}
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 고용상인.bmp
    mouseclick, left, 660, 65, 3
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 장비탭.bmp
    mouseclick, left, 687, 91
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 장비.bmp
    mouseclick, left, 172, 239
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 세일.bmp
    clipboard = 2147483647
    send, {ctrl down}
    send, vv
    send, {ctrl up}
    send, {enter}{enter}
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 메소.bmp
    mouseclick, left, 325, 145, 8
    mouseclick, left, 305, 145, 5
    }
    }
    {
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 인벤.bmp
    if errorlevel = 1
    send, {i}
    sleep, 200
    {
    mouseclick, left, 778, 65, 3
    sleep, 200
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 할매.bmp
    mouseclick, left, 692, 92, 4
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 확인.bmp
    clipboard = S
    send, {ctrl down}
    send, v
    send, {ctrl up}
    send, {enter}{enter}
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 고용상인.bmp
    mouseclick, left, 660, 65, 3
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 장비탭.bmp
    mouseclick, left, 687, 91
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 장비.bmp
    mouseclick, left, 172, 239
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 세일.bmp
    clipboard = 2147483647
    send, {ctrl down}
    send, vv
    send, {ctrl up}
    send, {enter}{enter}
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 메소.bmp
    }
    }
    return
    여기서 저 메소 사진을 더블클릭하려면 어떻게해야되나용..

    그리구 이건지금 if errorlevel = 0 찾앗을경우고 못찾앚을경우는 i를누르고 저기
    {
    mouseclick, left, 778, 65, 3
    imagesearch, vx, vy, 0, 0, a_screenwidth, a_screenheight, *50 할매.bmp요기부터 시작하려는데 .. 안되나여 ㅠㅠ?

  14. 2012.08.25 22:31  수정/삭제  댓글쓰기

    비밀댓글입니다

  15. 오토핫키초보 2012.09.11 20:25 신고  수정/삭제  댓글쓰기

    이미지서치를 할때 총 4개의 이미지를 순서대로 찾아서 클릭을 해야 하는데요
    1번 2번 3번을 찾고 3번을 찾은 다음에 4번은 3번을 찾은 다음에 클릭하게 만들고 싶습니다.

  16. 2012.09.18 09:09  수정/삭제  댓글쓰기

    비밀댓글입니다

  17. 오토토토 2012.09.18 09:10 신고  수정/삭제  댓글쓰기

    컴파일 할때 이미지파일 까지 같이 컴파일이 가능한가요?

  18. 오토토토 2012.09.18 16:06 신고  수정/삭제  댓글쓰기

    한 소스 안에 1번 이미지를 찾으면 1번 명령어만 2번 이미지를 찾으면 2번 명령어만 실행되게끔 할 수 있을까요?
    1번과 2번 이미지를 찾지 못했을땐 아무동작도 하지 않게도 할 수 있을까요?

  19. 오토마타 2013.01.01 19:12 신고  수정/삭제  댓글쓰기

    F6::
    imagesearch,vX,vY,2,1,64,33,*10 a.bmp
    if errorlevl = 0
    msgbox, 찾음
    return
    이러케 했는데 뭐가 잘못됬나요??

    사진이랑 오토핫키는 폴더안에 넣어둿는데 뭐가 잘못됬나요??

  20. sam 2013.08.03 18:50 신고  수정/삭제  댓글쓰기

    여기서 오차가 어떤 오차인가요

    크기나 색상, 각도의 오차 다 포함하나요?

  21. ㅇㄴ 2014.02.21 21:43 신고  수정/삭제  댓글쓰기

    스크립트 같은거 난생 태어나서 처음 겪어보는거라 신기하고 재밌네요

    그런데 응용하기는 너무 힘들어서 스크립트 하나만 도와주시면 감사하겠어요 ㅠ

    end::exitapp
    Insert::reload
    Home::

    Mouseclick,left,640,45,1
    Mouseclick,left,481,150,1
    Mouseclick,left,660,161,1
    Mouseclick,left,880,248,1
    Mouseclick,left,706,714,1


    여기까지 했고 a.JPG 와 같은 이미지가 뜨면 그걸 클릭할수 잇게끔


    아무튼 좋은글 감사합니다

Powerd by TalkBlog Tistory, designed by 한밤의 TV연애

티스토리 툴바