매크로

자유
2014.11.17 14:26

오토핫키 함수에 관해서요.

조회 수 971 추천 0 댓글 6


lidmt님이 게시판에 작성하신 부분인데요.

그냥 보면 도무지 이해가 안되어 , 함수부분들 글좀 찾아보다가

일반적으로 쓰는 vx,vy x,y 등으로 일단 바꿔서 제 개인적으로 좀더 이해하려고 애써봤습니다.


일반적 함수형태는,

imageSearcher(ByRef vx, ByRef vy, X, Y, w, h, img) 이런식으로,,

함수이름(변수, 변수, 변수 ... ){ }? 이런 형태로, 함수이름은 자기맘대로편한것 쓰면되구요.

이 함수선언부분은 본문 스크립트에 영향을 주지 않는 개별공간이라 보면 되겠네요. 아무대나 넣어도

스크립트 순서 진행에 영향을 주지 않는다는거죠. 무시하는거에요.

아무대나 함수선언해두고 , 불러올때는 imageSearcher(vx, vy, X, Y, w, h, "모험하기.png") 이런식으로 불러옵니다.

불러온다기보다 함수선언한데로 갔다가 진행하고 다시오는건데요.

제가 볼땐 gosub랑 흡사하네요. 거의차이없는듯해요.





imageSearcher(ByRef vx, ByRef vy, X, Y, w, h, img){?? ; 함수 선언부 byref vx는 약간 이해안가는부분인데요.

; 함수호출시?함수에 대입대는 변수에 간섭을 가능하게 해줍니다. 라고 나오는데 암튼 byref를 안쓰면,

; 본스크립에서 vx,vy값을 가지오지못하더군요. byref를 쓰면 영향을 주는것 같네요.
ImageSearch, vx1, vy1, X, Y, w, h, *50 img\%img%? ; 함수내의 스크립트진행, 일반적 이미지서치그대로,
if(ErrorLevel = 0){ ;이미지 있다면
vx := vx1 ; 결과 좌표인 vx1,vy1 좌표를 vx , vy에 각각 넣음, 왜 두번일하는지 조금 헷갈리네요.
vy := vy1

return true ; 함수는 return을 하면 그 값을 최종적으로 반환합니다.? 이함수는 최종 true라는 값을 내뱉죠.
}
else if (ErrorLevel = 1){? ;없다면
return false? ; false 값을 반환
}
}

; 여기까지 imagesearcher 이라는 함수가 끝나는데 ,

; 함수선언부자체가 본문스크립에 영향주지 않아서, return도 필요없어요



; 아래는 imageclick라는 또다른 함수 선언부에요. 이부분은 위랑 비슷하니 생략

imageClick(X, Y, vx, vy,지니모션){

x:=vx-X-7 +5
y:=vy-Y-30 + 5
N:=x|y<<16
PostMessage, 0x201, 1, %N%, , %지니모션%
PostMessage, 0x202, 0, %N%, , %지니모션%
sleep, 500
}



;이곳에서부터 스크립 본문시작 입니다. 위 함수선언부는 다 무시되고 여기 진행되는거죠.

;세밀하게 뭐뭐 빠졋고 그런건 신경쓰지마세요. 대충 부분부분 가져온거라서요.

;일반적인 스크립트 부분 설명 생략

F1::
CoordMode, Pixel, Screen
WinGetActiveTitle, 지니모션
WinGetPos, X, Y, width, height, %지니모션%
w := X+width
h := Y+height


result := imageSearcher(vx, vy, X, Y, w, h, "모험하기.png") ; 이곳이 함수를 호출하는곳인데요.

;vx,vy값은 함수내에서 찾는거라 값이 현재없겟죠. 일단 각 값을 가지고 위 함수로 그대로 대입합니다.
if(result=true){? ; 위 함수내에서 이미지찾았으면, result가 true이기 땜에 , 이렇다면
imageClick(X, Y, vx, vy, 지니모션) ; 또다른 imageclick함수를 호출해서 클릭작동...
}


;나머지 다른 이미지 찾는것들도 이런식으로 해주네요.. 아래 보시면 바꿀건 이미지이름뿐이네요.
sleep 500
result := imageSearcher(vx, vy, X, Y, w, h, "아레나.png") ; 이미지 이름만바꿔주면, 이미지찾으면 클릭까지작동.
if(result=true){
imageClick(X, Y, vx, vy, 지니모션)
}


return





대충 이해한데로 주석했는데요.

vx,vy부분, byref부분이 좀 애매하네요.?

global함수지정도 있던데 , global 변수이름 하면 , 함수내에까지 영향을 줘서 변수를 같이사용가능하더군요.


근데 , 위와 같이 할경우 ,

gosub쓰는게 훨 보기 더 좋은거 같아요.


ImageSearch, vx, vy, %x%, %y%, %w%, %h%,?*50 img\탐험성공.png
if (errorlevel=0){
gosub,클릭
sleep 200
}


이런식으로 쓰는게 더 문장도 짧고 간결해보이네요.

아무래도 함수가 이런 진행에 쓰는건 아니고 , 더 복잡한것에 사용해서인지 모르겟어요.


제가 잘못 이해한 부분은 댓글로 짚어주시면 감사하겠습니다...?



  • theruin 2014.11.17 18:20

    imageClick(X, Y, vx, vy,지니모션){

    x:=vx-X-7 +5
    y:=vy-Y-30 + 5
    N:=x|y<<16
    PostMessage, 0x201, 1, %N%, , %지니모션%
    PostMessage, 0x202, 0, %N%, , %지니모션%
    sleep, 500
    }

    이렇게 함수를 짜셨는데 이거 사용하실때

    imageClick(X, Y, vx, vy,지니모션) <-이런식으로 값넣어서 쓰자나요, 근데 X,Y, 지니모션은 프로그램 실행시 고정값이라 계속 넘겨줄필요가 없자나요. 그래서 제가 그냥 global 써서 함수내에 변수 집어넣어서 지정값 그대로 가져다 쓰게 한거에요.?imageClick( vx, vy) 이런식으로 값두개만 넘기면 되니까요. 그러면 실제 사용이

    ImageSearch, vx, vy, %x%, %y%, %w%, %h%,?*50 img\탐험성공.png
    if (errorlevel=0){
    imageClick( vx, vy)
    sleep 200
    }

    이런식으로 되죠, gosub 부분만 함수로 바뀐거에요 이건뭐 사용하시는분 취향이니 편한데로 쓰시는게..

  • theruin 2014.11.17 18:25

    추가로 검색범위를 지니모션 창 범위로 지정하셨던데, 고정범위로 계속 이미지서치 하실거면 이미지서치랑 클릭전부를 함수에 집어 넣어서 이미지 이름값만 넘겨주면 찾아서 클릭하는 함수를 만들어서 쓰시는것도 괜찮을듯하네요

  • theruin 2014.11.17 18:37

    아..또추가하네요..

    imageSearcher(ByRef vx, ByRef vy, X, Y, w, h, img) ?이함수 리턴값이 있는 이유는

    이미지 검색을했을때 만약 찾으면 클릭하겠지만 그이미지 없을때 다른 행동을 하기 위해서 인거 같습니다.

    예를 들어

    if?imageSearcher(ByRef vx, ByRef vy, X, Y, w, h, img)?

    {

    vx, vy 값가지고 클릭하겠죠. 이미지가 있으니

    }

    else

    {

    이미지가 없을시 행동

    }

    이런식의 사용을 위해서 return 값을 사용한듯합니다

  • 우후훅 2014.11.17 19:54
    일단 천천히 정리중인데 , 시간 날때 다시 정리좀 해야할거같애요
  • lidmt 2014.11.20 05:24

    http://tailstar.net/autohotkey/1327497


    Function과 ByRef에 대해 잘 설명되어 있는 글이기에 읽어 보시면


    도움이 될 것 같습니다.

  • lidmt 2014.11.20 05:31

    이미지를 찾고 결과를 리턴해주는 Function과 비활성 클릭을 하는 Function을 따로 둔 이유는


    이미지만 찾는 작업을 할 때가 있고, 이미지를 찾고 결과에 따라 클릭을 할지 다른 이미지를 찾을지


    등등 여러 상황이 있기에 분리했습니다.


List of Articles
분류 제목 글쓴이 최근변경 추천
질문 return 이 궁금합니다 ㅠㅠ 10 밴클리프 2014.11.11 0/0
자유 숨어야산다님 조언 따라 만들어본 픽셀,좌표 확인기! 11 으뜸어린이 2014.11.28 1/0
질문 themida 사용하시는분 계신가요? 7 호로록뚝딱 2014.11.26 0/0
질문 비활성 마우스 질문드립니다. 3 lidmt 2018.02.20 0/0
정보 이미지서치 후 비활성 클릭 17 lidmt 2016.07.02 0/0
질문 이미지서치 부분입니다. 변수에 값을넣는데요. 4 우후훅 2014.11.11 0/0
자유 SciTE4AutoHotkey 자료 요청드립니다. 8 레이븐 2014.11.18 0/0
질문 gui버튼 시작중지 보임안보임설정부분요. 11 우후훅 2015.03.07 0/0
질문 이미지서치 확장자 질문드립니다. 6 생물 2014.11.17 0/0
질문 혹시 핫키 눌러서 수행중에 다른핫키도 먹히게 하는게 ... 3 으뜸어린이 2014.11.15 0/0
질문 GUI 버튼 체크상태 실시간판별 어떻게하나요. 13 우후훅 2014.11.14 0/0
질문 오토핫키 잘하시는분 도움좀 부탁드려요. 3 라디 2014.11.15 0/0
질문 비활성 메크로는 오토핫키만 가능한가요? 28 으뜸어린이 2014.12.01 0/0
자유 특정게임 매크로 작동안되는것들이 문제죠. 6 우후훅 2014.11.15 0/0
질문 이미지서치할 때 같은 폴더내 모든 이미지를 찾는 명령... 5 으뜸어린이 2014.11.18 0/0
질문 별이되라 이미지서치 이부분 잘되시나요? 8 우후훅 2015.01.15 0/0
질문 이거 비활성으로 싹다 바꾸려면 어떻게 해야하나요?? 10 cris 2015.03.20 0/0
자유 핫키, Postmessage 어떻게들쓰고계세요? 15 우후훅 2016.04.08 0/0
질문 gui,add,picture 를 버튼형식으로 만들 수는 없나요?? 10 으뜸어린이 2014.11.26 0/0
자유 오토핫키 함수에 관해서요. 6 우후훅 2014.11.20 0/-1
Board Pagination Prev 1 34567891011 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글