매크로

조회 수 2017 추천 1 댓글 12


x = 0
y = 0
w = 100
h = 100
^F::
{??? ??? ; main Function
???
??? ImageSearch, vx, vy, %x%, %y%, %w%, %h%, *50 img\탐험하기.png
??? if (errorlevel=0){
??? ??? gosub,클릭
??? ??? sleep 200
??? }
???
??? sleep, 10000
???
??? ImageSearch, vx, vy, %x%, %y%, %w%, %h%, *50 img\탐험성공.png
??? if (errorlevel=0){
??? ??? gosub,클릭
??? ??? sleep 200
??? }
}
return

위 매크로의 뜻은
텀험하기 이미지를 찾아서 참험하기가 있으면 클릭,
10초 기다리고
탐험성공 이미지가 있으면 해당 좌표 클릭 이 되죠.

말씀하신 ByRef와 함수를 사용하는 방법으로 바꿔볼까요?


x = 0
y = 0
w = 100
h = 100
^F::
{??? ??? ; main Function
??? if (!searchImage(vx,vy,x,y,w,h,"탐험하기") {
??? ??? Click(vx,vy)
??? }
??? sleep, 10000
??? if (!searchImage(vx,vy,x,y,w,h,"탐험성공") {
??? ??? Click(vx,vy)
??? }
}
return

searchImage(ByRef vx, ByRef vy,x,y,w,h,img) {
??? ImageSearch, vx, vy, %x%, %y%, %w%, %h%,% "*50 img\" img ".png"
??? return %ErrorLevel% ??? ??? ;찾으면 0 못찾으면 1 파일이 없으면 2
}
return


Click(vx,vy) {
??? 클릭함수(vx,vy)
??? sleep 200
}
return




1. 함수의 사용

- 왜 쓰냐고 하면.. 그냥 짜셔도 됩니다. 일자로.. 쭉쭉... GoSub를 사용하셔도 되구요

하지만 차후에 스크립트가 길어지다 보면 점점 양은 사용하는 수만큼 늘어납니다.

이미지 찾기 스크립트가 4줄이면 100개의 이미지를 찾으려면 그대로 400줄이 늘어나는거구요

함수를 사용하면 4줄을 미리 선언해놓고 불러서 사용하는 것이기 때문에 사용하는 횟수가 늘어나면 날수록 효율적인 코드가 됩니다.


그리고 오류 수정에 있어서도 탁월합니다. 만약 일정 부분이 잘못되었다면 아래의 일부 함수만 수정하면 됩니다. 하지만 그냥 코드를 구현했을 경우에는 각 부분별로 수정해야 되고 사용된 부분을 전부 찾아서 수정해야합니다.

함수를 불러서 사용하게 되면 그 함수 안에서만 값들이 사용되고 버려지므로 더 깔끔한 스크립트 제작이 가능합니다.


여기서... 바로 ByRef를 활용할 수가 있습니다.


2.ByRef?

ByRef는 값이 아닌 값의 주소를 참조하게 만들어 함수내에서도 값을 직접적으로 변경이 가능합니다.

그냥 함수로 변수를 보내면 걍 복사본만 들어갔다가 나오지만 이 ByRef를 사용하면 복사가 아닌 참조값으로 들어가게 됩니다.

하나만 더 예를 들어보면....



AAA = 100

BBB = 200


Loop ,3 {

MsgBox %AAA% and %BBB%

TEST(AAA,BBB)

}

return


TEST(ByRef AAA, BBB) {

AAA := AAA - 10

BBB := BBB - 10

MsgBox %AAA% AND %BBB%

}

return


이렇게 실행을 하면 결과는..


200 and 200??? ;함수 실행 전

190 AND 190?? ;함수 안에서 계산 후


190 and 200??? ;함수 실행 전

180 AND 190?? ;함수 안에서 계산 후


180 and 200??? ;함수 실행 전

170 AND 190?? ;함수 안에서 계산 후




쉽게 쓰려했는데 어떠실지 모르겠네요 ㅎㅎ...

gosub는 방이 그냥 거실로 된 원룸에서 왔다 갔다 하는것이고

함수는 방을 만들고 방에 필요한 것들을 들고 왓다 갔다 하는것인 차이 랄까요...ㅋㅋ


1. 코드를 짤때 가능한 반복 부분은 Function(함수)로...

2. 전역변수는 최소화... 필요하다면 ByRef를 이용하여 구현..



  • 우후훅 2014.11.17 16:40

    옴마나,,, 설명은 진짜 이해하기 쉽게 잘해주신거 같은데 , 알듯 말듯하네요.. 그냥 설명보면 이해는되는데,,

    나중에 보면 백지될거 같네요.. 응용도 못할거 같구요..

    이쪽 분야는 거의 처음접하는거라, 이해가 쉽게 되지는 않네요..? 설명은 정말 잘해주셧어요.

    닥치는데로 자주 해보는게 더 빨리 습득되겠죠. 여력은 안되네요..

    이곳 테일스타에도 , 이런 오토핫키 강좌가 많이 있었으면 좋겠어요..? 수고하셨고 감사합니다.


  • 우후훅 2014.11.17 16:47

    아참, 저 하나만 여쭈도 될라나 모르겟네요..? 본문과는 다른 내용인데요. 개인적으로 좀 방법을 찾고있어요.


    윈도우 탐색기에서 파일하나를 마우스로 선택시 , 그 파일의 이름을 추출할수가 있나요?

    일반적인 send명령어로 f2 , 복사 , 붙여넣기 이런방식 말구요...


    제가 하려는 것은 , 파일이 여러개 있는데 하나 선택하면 그 파일명의 한특정단어를 클립보드이건 ini파일이건 가져와서

    인터넷 구글같은데 검색란에 그단어가 자동 기입되고 검색을 하는거에요.

    검색의 간편화를 위한건데요.

    파일은 , abcdefg(name)hijklmn.txt? 이런식이라보고 , 단어추출은 괄호안의 단어로요..

    핫키 명령어들 보니 , 적당한게 안보이네요..


    혹시 가능할까요?

  • 류Macro 2014.11.17 17:29
    열심히 찾아봤는데... API를 사용한 스크립트는 찾기가 어렵네요 ;
    그나마 만만한 방식이라면...
    send ^c 컨트롤 C 를 누르고
    msgbox %clipboard% 를 하면 경로와 함께 파일명이 나오긴 하는데 이걸 stringsplit으로 나눠도 간단하게는 구현이 가능하겠는데

    윈도우 컨트롤을 쓰는 방법이 제일 맞는거 같은데 제 레벨로는 구현이 어렵네요 ㅠ
  • theruin 2014.11.17 18:05
    저랑 같은 생각하셨네요..ㅋㅋ 저도 능령이 안되서 윈도우 컨트롤은 구현이..ㅠ.ㅠ
  • theruin 2014.11.17 18:02
    http://www.autohotkey.com/board/topic/60723-can-autohotkey-retrieve-file-path-of-the-selected-file/

    여기 가서 한번보세요. 파일이름에서 괄호안의 단어 찾는건가요? 아니면 특정단어면 특정단어 구분은 어떻게 하는지?
  • 우후훅 2014.11.17 19:52
    파일이름 괄호안에것만 구분되서 찾는거죠.. 제가 예로 든거구요 실제는 조금 다르지만요 ㅎㅎ
    이게 쉽지많은 않나바여..ㅎ
  • theruin 2014.11.17 20:00
    f1::
    title:=gst() ; example
    SplitPath, Title, Title
    MsgBox, %title%



    gst() { ; GetSelectedText or FilePath in Windows Explorer by Learning one

    IsClipEmpty := (Clipboard = "") ? 1 : 0

    if !IsClipEmpty {

    ClipboardBackup := ClipboardAll

    While !(Clipboard = "") {

    Clipboard =

    Sleep, 10

    }

    }

    Send, ^c

    ClipWait, 0.1

    ToReturn := Clipboard, Clipboard := ClipboardBackup

    if !IsClipEmpty

    ClipWait, 0.5, 1

    Return ToReturn

    }

    뒤져보다 짜집기 한건데 이거 파일 선택상태에서 f1누르면 msgbox로 파일이름 내보내 줍니다
  • 우후훅 2014.11.17 20:03
    파일이름 빼는데 길기도 하네요... 고생하셨네염... 일단 시간나는데로 함해볼게용.. 감사합니당.. ㅎㅎ
  • 우후훅 2014.11.17 22:56
    지금 좀 테스트해밧는데요. 지금껏 몰랏던 부분이 잇엇네요.
    탐색기에서 마우스로 파일 한번만 클릭하고 컨트롤c 해도 파일명등이 복사가 된다는것을요.
    전지금껏 마우스 두번 클릭해서 복사가능하게 되면 컨트롤 c 해서 이부분은 생각치 못햇어요.
    단 경로가 모두 복사가 되네요. 그래서 splitpath 명령어로 경로부분과 파일이름부분을 쪼갯네요.

    간단하게 ,
    f1::
    send, ^c
    clipwait,0.1
    title1 := Clipboard
    SplitPath, Title1, Title
    MsgBox, %title%
    이렇게 해도 되네요.
    단지 위 예제문이 함수써서 긴 이유는 기존 클립보드 내용을 백업하고 바꿔치기 하느라 그런거같아요.
    예문보시면 다 아셨겟지만요 ㅎㅎ
    핵심은 파일선택후 컨트롤c가 먹힌다는거엿네용.
  • profile
    숨어야산다 2014.11.17 18:06

    100 and 200??? ;함수 실행 전

    90 AND 190?? ;함수 안에서 계산 후


    90 and 200????;함수 실행 전

    80 AND 190???;함수 안에서 계산 후


    80 and 200????;함수 실행 전

    70 AND 190???;함수 안에서 계산 후


    인거같네요 왜 "200 and 200??? ;함수 실행 전" 이지? 하고 한참 보고 있었네요 ㅎㅎ

  • 우후훅 2014.11.17 19:52
    저도 그부분 좀 이상했는데 .. 그건가보군요...
  • Muchi 2015.07.12 11:16

    전역변수찾고있엇는데..감사합니다


List of Articles
분류 제목 글쓴이 최근변경 추천
질문 controlsend,,{esc}, 2 헐키 2015.06.17 0/0
자유 오토 핫키?? 3 굵은팔뚝 2015.06.24 0/0
질문 버튼눌러진 상태에서 PixelGetColor가능하게할 수 있을... 2 서시 2015.06.16 1/0
질문 윈드로이에서 gdip 통한 비활성서치 해보신분 계신가요? 3 HyunsD 2015.06.16 0/0
질문 마우스를 GUI버튼에 갖다대면 도움말뜨게 하는방법 질... 6 우후훅 2017.10.28 0/0
질문 로그 라이브러리... 2 헐키 2015.06.16 0/0
질문 궁금한 부분이 있습니다. 궁금증호야 2015.06.15 0/0
질문 오토핫키는.. 매클중에 PC를 별도로 사용이 가능한가요? 5 HyunsD 2015.06.17 0/0
질문 명령어중에 창을 활성화 시키는 명령어가 있나요? 1 듯이 2015.06.14 0/0
질문 `키 스크립트에서 인식안하나요? 서시 2015.06.13 0/0
질문 일시정지(?) 스크립트? 한유진 2015.06.13 0/0
질문 핸콕님꺼 블레이드 매크로 질문좀드릴께요!! 2 가인아빠 2015.06.14 0/0
질문 핫키하나로 오토핫키를 온/오프 하고싶습니다. 7 서시 2017.09.08 0/0
질문 창을 가려도 이미지를 인식하게 할 수 있는 방법을..배... 궁금증호야 2015.06.12 0/0
질문 리스트 뷰 하나만 더 도와주세요 ㅜㅜ 1 뎅뎅 2015.06.16 0/0
자유 장난 삼아 만든 레이븐 지니모션 키보드 스킬... 2 헐키 2015.06.12 0/0
질문 비활성화에서 체크박스 실행은 어떻게 해야하나요? 민서s2아빠 2015.06.12 0/0
질문 셋타이머가 리셋이 되질 않네요... 이유가 무엇일까요? 7 지니블렉션 2015.06.12 0/0
질문 메모장은 되는 Postmessage, 크롬은 안되는이유는 뭘까요 1 법돌 2015.06.12 0/0
질문 이미지 서치 아닌 이미지서치(?) 가능할까요 4 home01 2015.06.11 0/0
Board Pagination Prev 1 ... 161162163164165166167168169 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글