매크로

자유
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
분류 제목 글쓴이 최근변경 추천
자유 첫 걸음마 중인데.. 5 나은 2015.05.04 0/0
자유 지니모션 후후... 1 프린치크 2015.01.05 0/0
자유 블레이드 매크로 공유좀 해주실분~~ 9 나은 2015.03.05 0/0
자유 몬길 매크로를 만들어보았습니다~ 8 페르니코 2015.05.04 0/0
자유 매크로 제작 예정 12 프린치크 2015.07.10 0/0
자유 오버워치 에임만듬 13 셋쇼마루 2016.08.30 0/-1
자유 비활성 매크로 필요하신분 10 프린치크 2014.10.28 0/0
자유 오핫키!!!!! 도전해봅니다.ㅠ 4 only원 2015.02.28 0/0
자유 확실히 오토핫키가... 16 아카드 2014.11.09 0/0
자유 비활성 매크로 드래그 관련 정보를 빙자한 질문~ 6 호로록뚝딱 2014.11.09 0/0
자유 오토핫키 잘쓰시는분들 도움좀주세요~ 16 파더 2014.11.09 0/0
자유 서버인증 + 하드시리얼 인증 관련 11 파더 2015.11.23 0/0
자유 오토핫키 명령어잘아시는분~? 9 파더 2014.12.01 0/0
자유 SciTE4AutoHotkey 자료 요청드립니다. 8 레이븐 2014.11.18 0/0
자유 특정게임 매크로 작동안되는것들이 문제죠. 6 우후훅 2014.11.15 0/0
자유 핫키, Postmessage 어떻게들쓰고계세요? 15 우후훅 2016.04.08 0/0
자유 오토핫키 함수에 관해서요. 6 우후훅 2014.11.20 0/-1
자유 ahk 환경의 중요성.. 3 znel 2014.11.19 0/0
자유 마우스 클릭 좌표 질문입니다... 3 추천캐릭 2014.11.22 0/0
자유 난리 났네요 ㅎㅎ 여러분 백업 잘해두세요 ㅠ 14 으뜸어린이 2014.11.27 0/0
Board Pagination Prev 1 2345678910 ... 28 Next
/ 28

전체 최신 인기글

전체 주간 인기글