오토핫키(AutoHotKey) 기초강좌 #11 - 매크로 만들기 응용 6 (함수2)




 전체 강좌

 1강 - 오토핫키(AutoHotKey) 소개

 2강 - 프로그래밍의 시작, GUI 만들기

 3강 - 매크로 프로그래밍 1 (Button, Loop, if 사용법)

 4강 - 매크로 프로그래밍 2 (ImageSearch, Send, Sleep)

 5강 - 매크로 프로그래밍 3 (Gui Submit)

 6강 - 매크로 만들기 응용 1 (if 응용, CoordMode)

 7강 - 매크로 만들기 응용 2 (핫키, if 응용)

 8강 - 매크로 만들기 응용 3 (While, GUI와 변수의 활용 1)

 9강 - 매크로 만들기 응용 4 (GUI와 변수의 활용 2)

 10강 - 매크로 만들기 응용 5 (함수1)

 11강 - 매크로 만들기 응용 6 (함수2)

 12강 - 매크로 제작 예제
















안녕하세요~ 킴영감입니다.


어제 밤에 갑자기 블로그 이름이 너무 한쪽에 치우친 것 같아서 게시물이 더 많아지기전에 바꾸기로 결심하고


이름만 바꾸려 했는데 주소까지 바꿔버려서...ㅠㅠ 기존에 강좌 보시던 분들께 죄송하다는 말씀 먼저 드립니다.ㅠㅠ


이미지에 워터마크 바꾸느라 새벽까지 고생했네요...ㅠㅠ


피곤하지만 끝을 향해 힘내서 달려보겠습니다. 


오늘 강좌를 끝으로 오토핫키로 매크로를 제작하기 위한 기능들은 모두 배우게 됩니다. 강좌를 보시는 분들 모두 힘내서 따라오시기 바랍니다.


지난 시간에 함수를 어떻게 사용하는지에 대해 배웠습니다.


이번 강좌에서는 약간의 응용 방법을 배우고 우리가 어디에 적용해야 하는지에 대해 고민해 보겠습니다.


함수를 호출하게 되면 우리가 작성한 내용을 실행하게되고 중괄호를 벗어나면 함수가 종료되고 원래의 코드로 돌아옵니다. 

지난 강좌에서는 함수가 종료되는 시점을 중괄호가 끝나는 지점으로 스크립트를 작성했지만 다른 위치에서도 종료시킬 수 있습니다.


함수 및 핫키, 버튼같이 프로그램이 실행되는 중괄호를 종료하는 방법은 동일하며 첫시간에 배웠던 "return"을 사용하는 것입니다.


"return"이란 단어 뜻 그대로 "돌아간다"는 뜻입니다. 스크립트를 한줄씩 실행하다가 "return"을 만나게 되면 원래의 코드가 실행되는 곳으로 돌아가게 되는 것입니다.


이해가 잘 안되시는 분들을 위해서 코드를 작성해서 설명드리겠습니다.


아래와 같이 스크립트를 작성하세요



지난 강좌에서 작성했던 스크립트를 그대로 사용했습니다. "함수1"의 2번 이미지를 찾고 클릭하는 부분에 "return"을 추가했습니다. 


시작버튼을 누르면 시작버튼 내부의 코드를 한줄씩 실행하다가 "함수1"을 실행하게 됩니다. "함수1"이 호출되면 함수 내부의 코드를 한줄씩 실행하다가 마지막 중괄호를 닫으면 함수가 종료됩니다. 하지만, 2번 이미지를 클릭하게되면 if 내부의 return을 만나게 되어 함수를 종료하게 됩니다. 위 코드의 경우 함수가 종료되면 while에 의해서 다시 함수가 호출되기 때문에 프로그램이 종료되는 것은 아닙니다. 


이해를 돕기위해 두가지 경우를 예를 들어서 설명해드리겟습니다.

만약 2번클릭 체크박스에 체크를 하고 콤보박스에서 4번을 선택했을 경우 시작버튼을 누르게 되면

1번클릭→2번클릭 (함수종료) → 1번클릭 → 2번클릭 (함수종료).....가 반복됩니다.

2번클릭 체크박스에 체크를 해제하고 콤보박스에서 4번을 선택했을 경우 시작버튼을 누르면

1번클릭 → 3번클릭 → 4번클릭안함 (함수종료) → 1번클릭 → 3번클릭 → 4번클릭안함 (함수종료)......이렇게 동작합니다.


지금바로 테스트 해보시기 바랍니다.



두번째로 "return"을 만나서 원래의 자리로 돌아갈 때에 특정 값을 가지고 돌아갈 수 있습니다. 


아래와 같이 코드를 작성하세요.



Button시작 부분에 새로운 변수 "2번클릭성공"을 추가하고 함수 사용부분을 그림과 같이 바꿨습니다. 이전 실습에 있는 그림에서 언급되어있듯이 함수를 사용할 때에 값을 반환 받을 수 있으며 "반환받을 값을 저장할 변수 := 함수()"의 형태로 사용할 수 있습니다.

그 아래에 반환되는 값을 이용해서 "클리어횟수"를 카운트 하는 부분을 추가했습니다.


이어서 아래 그림과 같이 스크립트를 수정하세요.



이전 실습에서 "return"을 "return 1"로 바꿨습니다. 2번을 클릭하고 나서 "return"을 만나면 1을 반환하겠다는 뜻입니다. 카운트를 위에서 해주기 때문에 3번이미지 클릭부분에 있던 카운트 코드를 잘라내어 위로 옮긴 것입니다.


먼저 프로그램을 실행해 보세요. 2번이 클릭되면 숫자가 카운트 되는 것을 확인 하실 수 있을 것입니다.


이처럼 함수를 사용할 때 특정 값을 "return + 값"의 형태로 받아올 수 있습니다. 이와 함께 "return + 변수"와 같이 사용 할 수도 있으니 참고하시기 바랍니다.


이것으로 우리에게 필요한 함수의 사용방법에 대해서 모두 알아봤습니다.


그럼 매크로를 만들 때에는 어떻게 사용해야 할까요??


가장 적합한 곳은 지금 어느화면에 있는지 판단할 때 입니다.


가상 OS(블루스택, 지니모션, 윈드로이 등)를 사용할 때에 가장 문제가 되는 것 중 하나가 "랙"입니다. 버튼을 눌렀는데 화면이 안움직이는 경우가 참 많이 발생합니다. 이렇게 랙에 의해서 생기는 오류를 해결하는 방법으로 화면이 어디 있는지 찾고 그 화면에 따라 맞는 버튼을 클릭하거나 특정한 동작을 할 수 있게 프로그램을 만드는 것입니다.



오늘 강좌를 끝으로 매크로를 만들기 위해 필요한 오토핫키 기능은 모두 배웠습니다. 이제 남은 것은 응용하는 능력을 기르는 것입니다. 제 강좌를 보시는 분이 학생일 수도 있고 직장인 일수도 있습니다. 게임을 즐기기 위한 부수적인 수단으로써 매크로 제작에 도전하셨을 수도 있고 게임 할 시간이 없어서 매크로를 만들고 싶어 하실수도 있습니다. 어떠한 경우든 하루에 한두시간씩 투자해서 꾸준히 하시다 보면 어느 순간 남들이 부러워 할만한 프로그램이 제작되어 있을 것이라 장담할 수 있습니다.


다음 강좌는 오늘까지 배운 내용을 어떻게 게임에 적용할 것인가에 대해 팁을 드리려고 합니다. 


프로그램을 만드는데 가장 중요한 것은 그림을 그리는 것입니다. 어떠한 알고리즘으로 구현할 것인가를 생각할 수 있다면 구현하기 위해 필요한 요소들을 사용방법에 맞게 사용만 하시면 됩니다. 하지만, 이 말조차 어렵게 느껴지시는 분들을 위해 마지막 강좌에서 밑그림을 그려드릴 것입니다.


다음 강좌를 보시기 전에 오늘까지 배운내용을 얼마나 잘 이해하고 있느냐에 따라서 도움이 될 수도 있고 안될 수도 있습니다. 그러니 반드시 복습에 복습을 반복한 뒤에 마지막 강좌를 보시기 바랍니다.



블로그 이미지

킴영감

프로그래밍과 게임공략, 게임과 관련된 프로그램에 대한 내용을 다룹니다.

댓글을 달아 주세요

  • rkdals128 2016.01.28 00:12  댓글주소  수정/삭제  댓글쓰기

    그러면 두번째내용에서 global 클리어 횟수 := 0 에서 global을 지우면
    클리어 횟수를 새는건 whlie 안에있는 if에서 새니까
    global을 지워도 2번클릭성공 했을때 숫자가 업데이트 되나요?
    제가 재대로 이해한건지 모르겠네요
    2번째 내용이 ㅜㅜ

  • 직접입력 2018.07.08 19:33  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 유튜브를 보고 오토핫키를 배우다가 처음보는 오류가 발생해서 글을 남깁니다.
    어제밤까지만해도 실행이 되던 프로그램이 오늘하니 갑자기 되지 않더군요;;
    그래서 명령어 적은거 다 빼보고 GUI적어놓은것만 해도 오류가 나타납니다;;
    이러한 상황으로만 봐서는 명령어 오류는 아닌것같고 구글링을해도 안나오네요..


    Gui, Add, Text, x30 y5 w110 h20, 매크로 프로그램
    Gui, Add, Text, x60 y25 w50 h20 v횟수제목, 횟수
    Gui, Add, Text, x60 y50 w50 h20 v횟수, 0
    Gui, Add, Button, x20 y80 w110 h20, 시작
    Gui, add, button, x20 y110 w110 h20, 멈춤
    Gui, Add, Button, x20 y140 w110 h20, 종료
    Gui, Show
    기본강좌에서 알려주신 가장 기본적인 GUI창을 만들기 위한 명령어 이구요
    f5를 누르면 이러한 오류가 발생했다고 나타납니다.
    >"C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "C:\Program Files\AutoHotkey\SciTE\TestSuite.ahk"
    다른 명령어를 집어넣었을때도 위와 같은 메세지가 출력되었을뿐만 아니라
    GUI창이 나타나기는 하는데 시작버튼을 누르든 뭘하든간에 어떠한 반응도 없었구요..
    전부다 삭제하였다가 다시깔고 처음부터 다시해도 같은 명령어가 나타납니다.
    이거 원인이 뭘까요 ㅠㅠ 도와주시면 감사하겠습니다. ^^;

    • 킴영감 2018.07.12 05:03 신고  댓글주소  수정/삭제

      파일경로가 문제인 것 같습니다.
      바탕화면에 새로운 스크립트를 만드시고 스크립트를 작성하신 다음에 다시실행해보세요~
      그래도 안된다면 다시 댓글 주시구요~

  • ddd 2018.07.29 19:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 코딩 초짜인데 너무 쉽게 설명해주셔서 다 이해하고 이제는 어느정도 오토핫키를 다룰수 있게되었어요 감사합니다!
    궁금한점이 하나 있는데요 1번그림에서 Image2.bmp서치하는 부분에 return을 넣어줬는데 왜 image2.bmp서치하는부분으로 안돌아가고 함수1로 돌아가는지 궁금합니다! 답변해주시면 감사하겠습니다 ㅎㅎ

    • 킴영감 2018.07.29 20:08 신고  댓글주소  수정/삭제

      return이 현재 영역을 벗어나는 역할이라고 생각하시면 됩니다. 그래서 return을 만나면 함수를 벗어나 함수를 호출한 자리로 돌아가는거에요^^

  • ddd 2018.07.30 01:12  댓글주소  수정/삭제  댓글쓰기

    아 그렇군요! 그러면 while이나 loop안에 return을 넣어도 while이나 loop의 처음명령으로 돌아가는건가요?

    그리고 함수를 반환한다?라는 개념이 잘 이해가 안되는데 무엇을 반환하는건가요? 처음값으로 돌아간다는 얘기인가요??

    • 킴영감 2018.07.31 21:18 신고  댓글주소  수정/삭제

      while이나 loop를 벗어나는 것보다 큰 개념이라고 생각하시면 되요^^
      혹시 블로그만 보고 공부중이시면 제 유튜브채널 가시면 좀 더 자세히 설명한 강의가 있으니 도움 되실 것 같습니다~