오토핫키 :: 7강 서브루틴을 애용하세요

오토핫키 :: 7강 서브루틴을 애용하세요

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

오토핫키로 스크립트를 작성하는데 서브루틴이라는 것이 있습니다.
서브루틴은 스크립트를 작성하는데 있어서 메인 루틴을 도와주는
루틴을 의미합니다.

실질적인 사용은 메인스크립트의 간편화로 가시력을 올려주며
다양한 응용을 가능하게 합니다.

오늘은 서브루틴의 간단한 이용을 배워보겠습니다.

서브루틴은 Gosub와 Goto의 명령어를 이용합니다.

오토핫키 강좌


Gosub, Label ; 해당 레이블로 뛰어서 Return 만날 때까지 계속 실행. Return을 만나면 불린 곳으로 돌아감.
Goto, Label ; 해당 레이블로 뛰어서 계속 실행. Return을 만나면 종료.


명령어는 위와같습니다.
설명을 조금해드리자면 Label 부분에는  사용하시고자 하는 변수를 이용하시면 됩니다.

Gosub는 서브루틴으로 가서 Return을 만나면 다시 Gosub가 실행되었던 곳으로 돌아가서 그 다음 명령어를 실행하죠.

Home::
msgbox, 명령어1
gosub, test
msgbox, 명령어3
return

test:
msgbox, 명령어2
return 


위와 같은 경우 실행되는 것은 msgbox, 명령어1, 명령어2, 명령어3 입니다.
Gosub명령어를 받고 test라는 서브루틴으로가서 메세지박스를 실행하고 불려왔던 곳으로 다시돌아가 다음 명령어를 실행하게 되는 것이지요.
이를 응용한다면 다양한 작업을 하실 수 있습니다.

Home::
msgbox, 명령어1
goto, test
msgbox, 명령어3
return

test:
msgbox, 명령어2
return 


goto명령어를 이용하신다면 메시지박스는 명령어1을 출력하고 그다음 test라는 서브루틴으로 이동해서 명령어2를 실행하고
종료되죠. 물론 조건문을 이용해서 return을 만나기 전에 원래 메인루틴으로 보내버리거나 다른 서브루틴으로 날려버릴 수 있지만 스크립트가 지저분해지고 분석하기 어려울 수 있기떄문에 추천하지 않습니다.

오토핫키 이번에는 서브루틴에 대한 간단한 강좌였습니다. 한번 확인해보시고 도전해보세오. 


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

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.02.17 17:35 신고  수정/삭제  댓글쓰기

    아주간단합니다.
    스키립트 최상단에
    종료를 원하시는키::exitapp
    F12::reload
    F6::
    이렇게 쓰시면 됩니다.

    링크(http://tvdusdo.tistory.com/176)

  3. BlogIcon 재질문 할께요~ 2012.02.17 18:06 신고  수정/삭제  댓글쓰기

    그러면 F6을 눌러서 스크립트가 진행될때는 마우스 움직임을 제어하고 f12를 눌러서 매크로를 멈춘 후에는 마우스를 움직이게 할수도 있을까요?

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.02.17 18:31 신고  수정/삭제

      물론 가능하죠~
      지금 말씀하시는 제어라는 부분이 사용자 마우스 욺직임을 막는 것이지요??
      BlockInput이라는 옵션을 사용할 수 있어요.

      F12::
      blockInput,off
      exitapp

      F6::
      blockInput,mousemove
      return

  4. 도와주세요 2012.02.18 21:47 신고  수정/삭제  댓글쓰기

    강좌 잘보고있습니다.
    그런데 막상 적용해서 해보려고 하니 한계가있네요

    예를들어

    1번명령을 계속적으로 수행하다가 중간에한번씩 다른명령을 수행한다음

    계속적으로 1번명령을 수행하게 하려는데 자꾸 꼬이네요..

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.02.19 18:50 신고  수정/삭제

      늦은 답변 죄송합니다.
      간단한 프로그래밍을 하느라 블로그를 하루 쉬었습니다.
      1번 명령을 계속적으로 수행하다 중간에 한번씩이라면
      시간간격인가요? 아님 조건간격인가요?^^

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.02.19 18:52 신고  수정/삭제

      ;--- 예시 스크립트입니다.
      SetTimer, sub, 10000 ; 10초 간격으로 sub루틴을 실행합니다.
      End :: exitapp
      Home ::

      loop
      {
      ;실행하시고자 하는 명령어
      }
      return

      sub:
      Critical
      ;원하시는 명령어
      return

  5. 도와주세요 2012.02.19 20:53 신고  수정/삭제  댓글쓰기

    감사합니다.

    게임에 오토핫키 적용하려는데 방향키도 설정할수있나요?

    스크립트하나 짜기 힘드네요 ^^;;;;;;

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.02.19 23:10 신고  수정/삭제

      게임에 오토핫키를 적용하고 싶으시다구요?
      방향키를 사용하신다는게 정확히 어떤건지 설명해주시면 스크립트를 만들어드릴게요~

  6. 부탁드려요~ 2012.02.20 15:46 신고  수정/삭제  댓글쓰기

    매크로를 처음 시작할때만 메시지박스를 띄우고

    재시작 할때는 않띄어 지게 할수 있나요?

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

      예시 스크립트 날려드려요~

      end::exitapp
      Insert::reload

      CoordMode,Pixel,relative
      CoordMode,Mouse,relative
      SetDefaultMouseSpeed, 0

      Home::
      count++
      if count = 1
      msgbox, ; 원하시는 메시지
      사용 스크립트
      return

      이랬을경우 처음 홈키를 눌렀을때만 메시지 박스가 나옵니다. 물론 Reload시 초기화 됩니다.

  7. 오토핫키 질문 있습니다. 2012.02.20 16:51 신고  수정/삭제  댓글쓰기

    이미지 서치를 해서 이미지를 찾았을 때 그 이미지를 클릭해야되는데

    클릭 하지를 않네요...

    클릭 하게 하는 방법좀요..

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.02.20 17:00 신고  수정/삭제

      ImageSearch,vX,vY,1,1, A_ScreenWidth, A_ScreenHeight,*50 a.jpg
      if errorlevel = 0
      mouseclick,left,vX,vY,1

      ;이런식으로 사용하시면 됩니다.

  8. BlogIcon 이미자 2012.02.21 12:30 신고  수정/삭제  댓글쓰기

    저기 키를 누르는거 설정할때 CTRL 이랑 F1을 같이 누르게 하고싶은데 어떻게 명령어를 써야할까요?

  9. 도와주세요 2012.02.22 00:35 신고  수정/삭제  댓글쓰기

    염치불구하고 스크립트 부탁드릴께요 ㅎㅎ..

    숫자키 3번과 enter키를 연속적으로 누르면서 ( 3 enter 3 enter ... 이런식)

    가끔씩 숫자키 2번 ( 5번정도 눌러줌 ) 과 10초마다 0키를 3번씩 눌러주면서 제가 원하는 방향으로

    움직이는 스크립트가 가능한가요 ......... 복잡하죠 ㅠㅠ?

    제가 한캐릭이 한캐릭을 따라다니면서 체 밀어주고 하게 할려는데..

    케릭터 인식을 해서 따라다니게 할수는 없죠?

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.02.22 09:52 신고  수정/삭제

      설명이조금 난해하네요.
      가끔식 숫자 2번키를 눌러준다는건 5번정도요...
      스크립트 동안 5번만 누름 된다는건가요?
      10초마다 0키를 3번씩누르고자 한다면 0키를 누를때에는 3 enter는 없어도 된다는거죠?

      이동을 한다는건 어떤 방식인지 알아야하는데
      어떤게임이세요?

  10. 도와주세요 2012.02.22 15:46 신고  수정/삭제  댓글쓰기

    바람의나라요 ㅎㅎㅎㅎㅎㅎㅎ
    2번키와 0키는 엔터없이 눌러주고요
    2번키는 20~30초마다 5번씩 눌러주고요
    0키는 10초마다 3번씩 눌러주는거요..ㅎㅎ

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.02.23 20:40 신고  수정/삭제

      바람의 나라같은 경우 욺직일 경우 지정한 타겟팅이 방향키로 이루어 지기 때문에 문제가 될 수 있을 것 같습니다.
      제가 바람을 하던 시절에는 그래서 반자동으로 이용하였습니다.

  11. 메이플에다 적용시키려면 2012.02.22 19:42 신고  수정/삭제  댓글쓰기

    메이플을 활성화 시켜야할텐데 스크립트좀 짜주세요 일단

    end::exitapp

    insert::reload

    Home::


    test = 삼★★장강잠재★ 올리고대기 장강40잠재80 고장강삼

    var = 삼★★장강잠재★ 올리고대기 장강40잠재80 고장강삼

    run,notepad.exe ;

    winactivate,notepad.exe ;

    loop

    {

    send,{enter}

    sleep,200

    send,%test%

    sleep,800

    send,{enter}

    sleep,200

    send,%var%

    sleep,800

    }


    대충이런 장사용도로 대화 스크립트거든요 ?

    일단 메모장에 해봣는데 활성화가 안되며

    메이플을 하려면 어떻게 ?

    Maple.exe 이거로 하니까 안되던데 ㅎㅎ

  12. 메이플에다 적용시키려면 2012.02.22 19:48 신고  수정/삭제  댓글쓰기

    글구 추가질문드릴게있는데

    삼★★장강잠재★ 올리고대기 장강40잠재80 고장강삼

    이 말을 치게하면


    »ï¡Ú¡ÚÀå°­ÀáÀç¡Ú ¿Ã¸®°í´ë±â Àå°­40ÀáÀç80 °íÀå°­»ï

    이렇게 바뀌어서 나오게되는데? 어떻게할까염~

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2012.02.23 20:38 신고  수정/삭제

      답변이 늦어서 죄송합니다.
      부득이하게 여러사정이 있어서 답변이 늦었네요.

      end::exitapp
      insert::reload
      Home::


      test = 삼★★장강잠재★ 올리고대기 장강40잠재80 고장강삼
      var = 삼★★장강잠재★ 올리고대기 장강40잠재80 고장강삼

      run,notepad.exe ;
      winactivate,제목 없음 - 메모장 ;이 부분은 활성될 윈도우의 타이틀을 적어주는 부분입니다. 타이틀은 오토핫키 설치시 같이 설치되는 AutoIt3 Window Spy로 손쉽게 아실 수 있습니다.

      loop
      {
      send,{enter}
      sleep,200
      clipboard = %test%
      clipwait
      send,^v
      sleep,800
      send,{enter}
      sleep,200
      clipboard = %var%
      clipwait
      send,^v
      sleep,800
      }
      return

  13. 도와주세요 2012.02.24 01:47 신고  수정/삭제  댓글쓰기

    그럼 사용하시던 스크립트는 어떤방식으로 하는건지 ... ?

    혹시 사용하시던 스크립트라도 알려주실수 있으신가요 ㅎㅎ;

  14. 은춘 2012.02.26 21:54 신고  수정/삭제  댓글쓰기

    감사히 잘보고 갑니다^^ 오토핫키 강좌 쭉 봤는데, 필요한곳에 유용하게 쓰일것같네요 이런게 처음이라 뭔소린가 하는 부분도 있지만 제게 필요한 부분이라도 건진게 어딘지..ㅎㅎ 나머지는 아직은 힘드네요 아주 기초적이지만 중요한 키보드랑 마우스 이용 부분 잘배워갑니다 즐겨찾기 해놓고 다음에 또 들려서 봐야겠네요 아무래도 한번봐서는 안될거같아요~ 감사합니다^^

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

      좀더 쉽게 설명했어야 하는건지 .. 좀더 자세하고 쉬운설명으로 앞으로 강좌를 이어가겠습니다.
      감사합니다.

  15. 신동근 2012.03.22 04:23 신고  수정/삭제  댓글쓰기

    Loop
    {
    send,{up down}s
    sleep,1000
    }
    return
    1. 위 스크립트를 입력하였을 시 어떠한 반응을 나타내는지요?

    그리고 위의 스크립트는

    키보드 위 방향키를 계속하여 누르고 있는 상태에서
    s키는 반복적으로 계속 누르고 있게 할려는 스크립라고
    만들어본건데 .. 맞나요?

    2. 또 .. {up down} 명령어를 넣고난 후
    또다른 방향키 명령어를 넣기위해서는 {up up} 명령어를
    넣어주어야 하나요??


    3 . 방향키 up 을 2초간 누르고 있다가 s를 누르는
    반복적인 스크립트를 짤려고 하는데 잘 되지 않습니다
    ☞이는 위에 1번 질문을 해결하기 위함입니다

    4. 제가 만들고 싶은 정확한 소스는 다음과 같습니다

    마우스로는 임의의 좌표 100, 100을 10초 간격으로 계속하여
    누르면서 이와 동시에 키보드는 방향키 up 을 2초간 누릅니다
    이어서 키보드 s 를 10회 눌러준 후 d를 2번 눌러주게 하는
    소스입니다

    정리하자면 마우스의 임의 좌표클릭은 계속하고있고
    이에 키보드 up2초, 이어서 s 10번, d 2q번

    이를 반복하게 해주는 스크립트를 짜고 싶습니다



    강좌를 살펴보고 살펴보며 만들어봣지만 번번히 실패하여
    이렇게 질문글 남겨드립니다

    거듭하여 확인할테지만 shadow2241@naver.com
    으로도 메일 보내주시면 감사하겠습니다

    좋은 강좌글 보고 매일같이 오토핫키를 공부하는 한 시람이
    되었습니다. 계속하여 좋은 강좌글 부탁드리고 언제나 좋은정보
    감사드립니다 ^^*

  16. 2012.03.26 18:36 신고  수정/삭제  댓글쓰기

    ::
    요게 루틴이라는 녀석이었군요~~

    메인루틴, 서브루틴ㅎㅎ

    감사합니다~~ 덕분에 또 하나의 지식을 얻었네요^^

  17. 박종화 2012.04.18 05:45 신고  수정/삭제  댓글쓰기

    이미지서치에서 헤메이다 어느새 여기까지 오게되었네요.

    goto명령어는 스크립트가 복잡하고 지저분해 진다고 하여, gosub명령어에 대해 생각해보다가

    혼자서 이것저것 만들어봤는데

    메인루트에서 서브루트로간후 서브루트 중간에서 다시 메인루트의 처음으로는 갈 수 없더라구요.

    이건 어떤식으로 해결할 수 있을까요?

    • 박종화 2012.04.18 05:48 신고  수정/삭제

      메인루트에서 서브루트로 옮겨진후 return으로 메인루트로 돌아가고 continue를 이용해서 돌아가는 방법밖에는 떠오르질 않는군요. 또 다른 방법이 있을까요?

  18. ㅇㅇ 2012.09.25 00:48 신고  수정/삭제  댓글쓰기

    연애가중매님.. 제가 도움이 필요합니다.. 이글 꼭 봐주셨으면 좋겠네요
    음.. 일단 제가 구현하려는것은
    1번에 어떠한 하나의 스크립트가 있고
    그 스크립트에 조건이 충족되면 계속 루프돌아가고
    두번째 스크립트가 또 따로있어서
    1번 이후에 2번이 연결되게 하려는데요..
    gosub 이거 써서 연결시켜봤거든요.. 근데 잘안되네요..

    대체 어떻게해야 될까요?
    이미지서치로 하는데 1번꺼 이미지랑 2번꺼 이미지랑 동시에 찾아지고..막 그럽니다..

    그리고 2번째 스크립트는 1번을 가동하는데 필요한 조건이 있을때만 작동되게하려는데..
    제가 써놓고도 무슨말인지 잘 모르겠네요.. 정말 어렵네요 이거..

    아무튼 조금이라도 조언 부탁드립니다..

    감사합니다.

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

      1번 스크립트를 루프로 돌리고 2번 스크립트는 따로 서브루틴을 만들어 두는 것이 맞습니다. 간단하게 조건문 하나만 적어주면 되겠죠?

      ; 예를들어 ---
      Home:: ; 메인루틴 시작
      loop
      {
      imagesearch, -
      if errorlevel = 0
      ;실행하고 싶은 명령어
      if ; 여기에 원하는 조건문을 줍니다.
      gosub,post ; 조건이 맞으면 post로 가라는 뜻이겠죠
      }
      return

      post:
      imagesearch, - ; 이렇게 된다면 조건이 형성될 때만 post에 이미지 서치가 이루어집니다.
      return

  19. 박서클 2013.03.19 16:08 신고  수정/삭제  댓글쓰기

    #InstallKeybdHook
    #Persistent

    F9::

    att()
    att(){
    SetTimer, A, 600000
    SetTimer, B, 10000
    send, {SC029}
    Loop
    {
    send, {1}
    sleep, 1000
    }
    }
    A:
    send, 3
    att()
    B:
    send, 2
    sleep, 1000
    SetTimer, B, off
    att()


    여기서 F9를 누르면 셋타이머 A 와 B가 시작되고

    loop 문이 돌면서

    1번키를 1초 간격으로 누르다가 셋타이머 B시간이 되면 (10초)



    B를 실행하고 셋타이머 B를 초기화하고 다시 함수 att()로 돌아가서 셋타이머 B를 시작하고

    다시 loop 문이 돌면서 1번키를 1초간격으로 누르다가 셋타이머 B시간 (10초)되면 다시

    B로 가서 B초기화하고 att()로 가서 loop 돌고 이렇게 짤려고 하는데 실제로 해보면



    att()를 실행하고 B로가서 B를 초기화하고 att() 처음 실행 까지는 잘되는데

    att()들어가서 셋타이머 B가 설정이 안되는지 자꾸 LOOp문에서 뺑뺑이 돌아서

    1버튼만 1초간격으로 계속 누르는데 제말은 처음에 B가 실행되고나서 att()가 실행되면

    B가 다시 타이머가 돌아서 loop 문 도는동안 10초가되면 다시 B가 실행되고 다시 att()

    가 불려서 1초마다 1번키를 누르다가 B가 실행되서 다시 att()를 불르고 이렇게

    무한반복 하고싶은데요 방법좀 ..

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2013.04.30 00:51 신고  수정/삭제

      블로그 운영을 잘 안해서 답변이 너무 늦어진 것이 아닌가 생각합니다.
      요즘 모든 오토핫키 관련 내용은 오핫넷에서 질답을 주고 받고있습니다 ^^
      번거로우시더라도 오핫넷에 방문해보시는 건 어떨까요?
      http://www.ohhot.net

  20. Favicon of http://sdfhisad,dsif BlogIcon 질문중 2013.08.12 06:29 신고  수정/삭제  댓글쓰기

    저기요... ㅠㅠ
    이미지가보이면. 누르고 안보이면. 무한반복하는.스크립트가능한가요?....(무한반복중에,다른작업가능할수있게)
    2.bmp<<이미지 이름이구여.
    이미지가 보이면 누를키는. 9/1/5/8/6 번이에용.
    그리고 . 이미지가. 나와서 번호 다 누르고 난 뒤에.
    종료.)되게 할수잇는 스크립트,,,,좀만들어주세용 ㅠㅠ

    • Favicon of http://tvdusdo.tistory.com BlogIcon 연애가중매 2013.08.13 15:39 신고  수정/삭제

      사이트 활성화를 위해서 현재
      질문 문의는 오핫넷을 통해서 받고 있습니다.
      번거로우시더라도 오핫넷을 통해서 문의를 남겨주실 수 있으실까요?^^

  21. Favicon of http://nekodearu.tistory.com BlogIcon nekodearu 2015.12.07 21:16 신고  수정/삭제  댓글쓰기

    아... 뒤늦게 왔군요.. 중매님이 처음엔 열심히 친절히 답변 다 달아주셨었네요. 노고의 흔적이 여실히 보입니다. ㅜ 오핫에 입문한지 3일차에 저만의 매크로를 만들려고 시작한 이래로 가장 큰 난관에 봉착해있어서 아침부터 여기저기 막 하루종일 검색하고 질문글쓰고 .. 물론 오핫에도 가입해서 질문글(글쓰기 권한이 뭔지 모르겠지만 한시간가량 이거저거클릭한뒤에서야..)도 써보았지만 요새 좀 죽었는지 아직 조회수가 30도 안됩니다. 답변도 없구요. ㅠ 미칠 노릇입니다. 흑...

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

티스토리 툴바