오토핫키 초보자 자습서, 작성 티드비트(tidbit)

목차

  1. 기본
    1. 오토핫키 내려받기
    2. 스크립트 만드는 법
    3. 명령어는 병합할 수 없다
    4. 기타 기본 정보
  2. 핫키 & 핫스트링
    1. 키 그리고 심볼
    2. 창 전용
    3. 파일당 여러 핫키
    4. 예제
  3. 키 눌림 전송하기
    1. 게임
  4. 프로그램 실행하기 & 웹사이트 열기
  5. 명령어 vs. 함수
    1. 코드 블록
  6. 변수
    1. 퍼센트를 사용할 때
    2. 사용자 입력 얻기
    3. 다른 예제들?
  7. 객체
    1. 객체 만들기
    2. 객체 사용하기
  8. 기타 도움이 되는 것들
    1. 신비한 []
    2. AHK 버전 알아내기
    3. 시행 착오
    4. 들여쓰기
    5. 도움 구하기
    6. 기타 링크

1 - 기본 지식

여행을 시작하기 전에, 조언을 한 마디 할까 합니다. 이 자습서에서 여러분은 꽤 많은 텍스트와 코드를 보시게 됩니다. 배우는 힘을 키우려면, 텍스트를 읽고 코드를 시험해 봅니다. 다음 그 코드를 연구해 보시기 바랍니다.
이 페이지에서 대부분의 예제를 복사해 붙여 넣을 수 있습니다.
잘 모르겠다면, 다시 읽어 보십시오.

a. 오토핫키를 내려받아 설치하기

AutoHotkey (AHK)의 사용법을 배우기에 앞서, 내려 받아야 하겠습니다. 내려 받았으면, 설치해야 겠지요. 그러나 그것은 원하는 버전이 무엇인가에 따라 달라집니다. 이 지침서에서는 설치기를 사용하겠습니다. 가장 쉽게 설치할 수 있으니까요.

텍스트 지시:

  1. AutoHotkey 홈페이지로 갑니다. http://ahkscript.org/
  2. 내려받습니다. http://ahkscript.org/download/ahk-install.exe
  3. AutoHotkey를 설치하는 동안 UNICODE 또는 ANSI 중 하나를 골라야 합니다. 짧게 말해, 아마도 UNICODE를 선택하는 편이 좋습니다. 영문자-아닌 문자와 숫자들을 지원하거든요. 설치 버튼이 나올 때까지 계속 진행합니다.
  4. 일단 끝났으면, 성공입니다! 섹션 b에서 계속합니다.

동영상 지시:
Frankie's "Install and Hello World"
http://www.autohotkey.com/forum/viewtopic.php?t=77674

b. 스크립트 만드는 법

오토핫키를 설치했으면, 뭔가 일을 시키고 싶겠지요. 오토핫키가 마법은 아닙니다. 우리 모두가 그렇기를 바라지만, 실제로는 아닙니다. 그래서 무슨 일을 하라고 지시할 필요가 있습니다. 이런 절차를 "스크립팅(Scripting)"이라고 부릅니다.

텍스트 지시:

  • 1. 데스크탑에 우클릭합니다.
  • 2. 메뉴에서 "New"를 찾습니다.
  • 3. "New" 메뉴 안에 "AutoHotkey Script"를 클릭합니다.
  • 4. 스크립트에 새 이름을 줍니다. 주의: 확장자는 .ahk로 끝나야 합니다. 예. MyScript.ahk
  • 5. 데스크탑에 새로 만들어진 파일을 찾아 우클릭합니다.
  • 6. "Edit Script"를 클릭합니다.
  • 7. 창이 열릴 겁니다. 아마도 노트패드이겠지요. 그렇다면, 성공입니다!

    이제 스크립트를 만들었으므로, 파일 안에 내용을 채워 넣어야 하겠습니다. 모든 내장 명령어와 함수 그리고 변수 목록은 section 5에서 보실 수 있습니다.

    다음은 핫키를 담고 있는 아주 간단한 스크립트입니다. 그 핫키가 눌리면 Send 명령어를 사용하여 텍스트를 타자합니다.

    ^j::
       Send, 나의 첫 번째 스크립트
    Return
    

    나중에 더 깊이 들어가 보겠습니다. 그 때까지, 여기에서는 위의 코드를 설명합니다.
    - 첫 줄. ^j::가 바로 핫키입니다. ^CTRL을 의미하고, j는 기호문자 j입니다. ::왼쪽에 있는 것은 모두 누를 필요가 있는 키들입니다.
    - 둘째 줄. Send, My First Script는 키들을 전송하는(SEND) 법을 보여줍니다. SEND는 명령어이고, 쉼표(,) 다음에 오는 것들이 모두 타자됩니다.
    - 셋째 줄. Return. Return은 앞으로 가장 많이 접하게 되실 겁니다. 문자 그대로 코드를 멈춥니다. 아래로 더 이상 진행하지 않습니다. 이렇게 하면 스크립트에 많은 내용이 있을 때 문제를 피할 수 있습니다.


  • 8. 파일을 저장합니다.
  • 9. 데스크탑의 그 파일을 더블클릭하여 실행합니다. 노트패드를 엽니다 (무엇이든 타자해 넣을 수 있습니다). 그리고 Ctrl and J를 누릅니다.
  • 10. 멋지지요, 성공입니다! 첫 스크립트가 실행되었습니다. 가서 잠시 쉬고 돌아와 이 자습서를 계속 읽어보십시오..

비디오 지시:
Frankie's "Install and Hello World"
http://www.autohotkey.com/forum/viewtopic.php?t=77674

c. 명령어는 병합할 수 없습니다

코드를 만들 때, 여러 명령어들을 한 줄에 또는 한 명령어 안에 다른 명령어를 배치하고 싶은 유혹에 빠질 경우가 많을 것입니다. 절대 그렇게 하지 마십시오. 섹션 5에서 왜 예상한대로 작동하지 않는지 그리고 대신에 어떻게 하면 좋은지 말씀드리겠습니다.

d. 기타 기본적인 정보들

도움말 파일 찾는 법:
몇 가지 방법이 있습니다. 도움말이 기본 위치에 설치되어 있다고 가정하겠습니다..

방법 1:
  1. 시작 메뉴를 찾거나 화면에서 Start Orb를 엽니다. 보통 좌하에 있습니다.
  2. 프로그램 또는 모든 프로그램을 선택합니다.
  3. 목록에서 AutoHotkey를 찾습니다.
  4. 찾았으면 AutoHotkey 도움말 파일이 보일 겁니다. 그것을 클릭합니다.
  5. 끝입니다!
방법 2:
  1. 데스크탑으로 갑니다.
  2. 내 컴퓨터 또는 컴퓨터를 찾습니다. 그것을 엽니다.
  3. AutoHotkey가 들어있는 하드 드라이브로 갑니다. 아마도 C:\ 드라이브이겠지요.
  4. Program Files 폴더 안에서 AutoHotkey를 검색합니다.
  5. AutoHotkey.chm를 찾거나 이름이 AutoHotkey인 파일을 찾습니다. 그 위에 노란색 물음표가 있습니다.
  6. 끝입니다!

온라인 링크:
문서
명령어 리스트
함수
변수

2 - 핫키 & 핫스트링

핫키란 무엇인가? 핫키는 손길에 반응하는 키입니다. ... 농담입니다. 핫키는 사용자가 키보드를 눌러 어떤 행위를 촉발시키는 키 또는 키의 조합입니다.
핫스트링이란 무엇인가? 핫스트링은 주로 타자하는 동안 약자를 확대하는 데 사용됩니다 (자동-치환). 또 스크립트 행위를 촉발시키는 데에도 사용할 수 있습니다.

다음은 핫키입니다:

^j::
   Send, 나의 첫 번째 스크립트
Return

다음은 핫스트링입니다:

::ftw::Free the whales

두 예제 사이의 차이는 핫키가 CTRL & J를 누를 때 촉발되지만 핫스트링은 "ftw"를 타자하면 바로 "Free the whales"로 치환합니다.

"그래서, 정확하게 어떻게 핫키를 만드는가?" 좋은 질문입니다. 핫키는 한 쌍의 ::로 만들 수 있습니다. 키나 키 조합의 오른쪽에 ::이 있어야 합니다. 그리고 내용은 아래에 있어야 하고, 바로 따라서 아래에 Return이 있어야 합니다.

주의: 예외가 있지만, 그런 것들은 혼란만 가중 시킬 뿐입니다. 그래서 그런 것들은 이 자습서에서 다루지 않습니다. 적어도 지금은 아닙니다.

esc::
   MsgBox Escape!!!!
Return

핫 스트링은 한 쌍의 ::로 만듭니다. 그 사이에 텍스트 교체를 촉발하고 싶은 텍스트를 넣습니다. 반면에 타자된 텍스트를 대신할 텍스트는 두 번째 :: 쌍의 오른쪽에 배치합니다.

핫스트링은 위에 언급한 바와 같이 스크립트된 행위를 촉발할 수 있습니다. 핫키와 똑 같이 "멋지게 일을 하거라"와 같은 마법의 주문입니다.

::btw::
   MsgBox You typed "btw".
Return

알아야 할 멋진 일은 각 핫키, 핫 스트링, 라벨 그리고 아직 언급하지 않은 많은 것들마다 많은 줄의 코드를 가질 수 있다는 것입니다.

^j::
   MsgBox Wow!
   MsgBox this is
   Run, Notepad.exe
   winactivate, Untitled - Notepad
   WinWaitActive, Untitled - Notepad
   send, 7 lines{!}{enter}
   sendinput, inside the ctrl{+}j hotkey
Return

a. 키와 그의 신비한 심볼

궁금하실 겁니다. "도데체 어떻게 ^이 CTRL을 뜻한다는 걸 알 수 있지?!". 음, 좋은 질문입니다. ^와 기타 심볼이 무엇을 뜻하는지 돕기 위해, 다음 표에 모아 보았습니다:
심볼설명
#Win (윈도우즈 로고 키)
!Alt
^Control
+Shift
& 앰퍼센드는 두 개의 키 또는 마우스 버튼 사이에 사용되어 맞춤 핫키로 조합해 사용할 수 있습니다.

(완전한 심볼 목록은 핫키 페이지를 참조합니다)

추가로, 다음은 핫키의 왼쪽에 사용할 수 있는 모든/거의 대부분의 핫키 이름 목록입니다:
KeyList.htm

두 개의 키를 (오직 두 개까지만) 조합해 정의할 수 있습니다 (조이스틱 버튼 제외). 그 사이에 &를 사용하면 됩니다. 아래의 예제에서, Numpad0를 누른 다음 두 번째 키를 눌러서 핫키를 촉발시켜 보겠습니다:

Numpad0 & Numpad1::
   MsgBox Numpad0을 누르고 있는 동안 Numpad1를 눌렀습니다.
Return

Numpad0 & Numpad2::
	Run Notepad
Return

그러나 이제 핫스트링은 핫키가 그런 것처럼 멋진 수식키들이 있을까 궁금하실 겁니다. 물론 있습니다!
핫스트링 수식키는 첫 번째 :: 쌍 사이에 들어갑니다. 다음과 같이:

:*:ftw::Free the whales

핫키와 핫스트링 수식키에 관한 더 자세한 정보와 예제는 다음을 참조합니다:
핫키
핫스트링

b. 창 전용 핫키/핫스트링

종종 핫키나 핫스트링이 특정 창에서만 작동했으면 (또는 작동하지 말았으면) 하고 바랄 경우가 있습니다. 앞에 #를 두고 다음의 환상적인 명령어를 사용하면 됩니다.

#IfWinActive
#IfWinExist

(기술적으로 "지시어"라고 불리우는) 이 특별한 명령어들은 문맥을-감지하는 핫키와 핫스트링을 만듭니다. 그냥 창 제목을 지정하면 됩니다. 그러나 어떤 경우는 HWND나 그룹 또는 클래스를 지정하고 싶을 경우도 있습니다. 그런 것들은 좀 고급 주제이므로 다음에서 더 깊게 다룹니다: #IfWinActive.

#IfWinActive Untitled - Notepad
#space::
   MsgBox 노트패드에서 Win+Spacebar를 눌렀습니다.
Return
#IfWinActive

문맥 감지를 끄려면, #IfWin 명령어는 지정하되 그의 모든 매개변수를 빈 채로 두면 됩니다. 예를 들어:

; Notepad
#IfWinActive untitled - Notepad
!q::
   MsgBox, 노트패드에서  Alt 와 Q를 눌렀습니다.
Return
#IfWinActive

; Untitled - Notepad가 아닌 모든 창
!q::
   MsgBox, 어떤 창인지는 모르지만 Alt와 Q를 눌렀습니다.
Return

#IfWin 명령어가 꺼져 있으면 (또는 스크립트 안에서 전혀 사용되지 않으면), 모든 핫키와 핫스트링은 모든 창에 반응합니다.


#IfWin 명령어는 위치에 영향을 미칩니다: 물리적으로 이 명령어 아래에 있는 모든 핫키와 핫스트링은 모두 영향을 받습니다.

; Notepad
#IfWinActive ahk_class Notepad
#space::
   MsgBox, 노트패드에서 Win+Spacebar를 눌렀습니다.
Return
::msg::You typed msg in Notepad
#IfWinActive

; MSPaint
#IfWinActive untitled - Paint
#space::
   MsgBox, MSPaint에서 Win+Spacebar를 눌렀습니다!
Return
::msg::You typed msg in MSPaint!
#IfWinActive

더 깊은 정보과 비슷한 명령어들을 보려면, 다음을 참조합니다:
#IfWinActive

c. 파일당 다중 핫키/핫스트링

어떤 이유로 이런 생각이 드실지 모르겠습니다. 그래서, 명확하게 밝혀 둡니다: 오토핫키는 파일 하나당 얼마든지 많은 핫키와 핫스트링을 가질 수 있습니다. 1이든 3253이든 (그 이상이든) 상관없습니다.

#i::
   run, http://www.google.com/
Return

^p::
   run, notepad.exe
Return

~j::
   send, ack
Return

:*:acheiv::achiev
::achievment::achievement
::acquaintence::acquaintance
:*:adquir::acquir
::aquisition::acquisition
:*:agravat::aggravat
:*:allign::align
::ameria::America

위의 코드를 완벽하게 받아들일 수있는 다중 핫키와 다중 핫스트링입니다. 모두가 하나로 뭉뚱그려진 행복한 스크립트 파일이네요.

d. 예제

::btw::By the way                          ; EndChar를 누르면 바로 "btw"를 "By the way"로 교체합니다.
:*:btw::By the way                         ; "btw"를 "By the way"로 바꿉니다.  EndChar가 필요 없습니다.

^n::                                       ; Ctrl & n Hotkey
   run, notepad.exe                        ; Ctrl & n을 누려면 바로 notepad.exe를 실행합니다
Return                                     ; 핫키가 끝납니다. 이 아래의 코드는 실행되지 않습니다.

^b::                                       ; Ctrl & b Hotkey
   send, {ctrl down}c{ctrl up}             ; 선택된 텍스트를 복사합니다. ^c도 사용할 수 있지만, 이 방법이 더 안전합니다.
   SendInput, [b]{ctrl down}v{ctrl up}[/b] ; 선택된 텍스트를 bbcode (forum) Bold 태그 안에 싸 넣습니다.
Return                                     ; 핫키가 끝납니다. 이 아래의 코드는 실행되지 않습니다.

3 - 키 눌림 전송하기

그래서 이제 키들을 프로그램으로 전송(타자)하기로 결정합니다. Send 명령어를 사용하면 됩니다. 문자 그대로 키들을 전송합니다. 마치 키를 타자하거나 누른 것처럼 흉내 냅니다.

더 깊게 들어가기 전에, 먼저 약간의 일반적인 문제들을 다룹니다:
핫키처럼, Send에도 특수한 키가 있습니다. 아주 많습니다.
다음은 가장 많이 사용하는 심볼 네 가지입니다:


!: ALT 키를 전송합니다. 예를 들어, Send This is text!a는 "This is text" 키들을 누른 다음 ALT+a를 누른 것과 같습니다. 주의: !A 는 다른 프로그램에서는 !a와 전혀 다른 효과를 냅니다. 이것은 !A가 ALT+SHIFT+A를 누른 것인 반면 !a는 ALT+a를 누른 것이기 때문입니다. 잘 모르겠다면, 소문자를 사용하십시오.

+: SHIFT 키를 전송합니다. 예를 들어, Send +abC 는 텍스트 "AbC"를 전송하고, Send !+a는 ALT+SHIFT+a를 누릅니다.

^: CONTROL (Ctrl) 키를 전송합니다. 예를 들어, Send ^!a는 CTRL+ALT+a를 누른 것과 같고, Send ^{Home}은 CONTROL+HOME을 전송합니다. 주의: ^A는 어떤 프로그램에서 ^a와 전혀 다른 효과를 냅니다. 이것은 ^A가 CONTROL+SHIFT+A를 누른 것이고 ^a는 CONTROL+a를 누른 것이기 때문입니다. 잘 모르겠다면, 소문자를 사용하십시오.

#: WIN 키를 전송합니다 (윈도우즈 로고가 그려진 키) 그러므로 Send #e는 윈도우즈 키를 누른 다음 기호 "e"를 전송합니다.

다음 두 문단에서 전송 페이지에 관한 테이블에 관하여 언급합니다.

주의:
이 테이블은 핫키적용되지 않습니다. 핫키를 만들 때 CTRL 또는 ENTER (또는 기타 어떤 키이든) {} 안에 싸 넣지 못한다는 뜻입니다.


다음 예제에서 핫키에 해서는 안되는 것들을 보여줍니다:
; 핫키를 만들 때...
; 잘못됨
{LCtrl}::
   send, AutoHotkey
Return

; 올바름
LCtrl::
   send, AutoHotkey
Return

위의 거대한 테이블에 아주 많은 특수 키들이 AHK에 내장되어 있는 것을 볼 수 있습니다. 예를 들어: {enter} 그리고 {space}.
많은 사람들이 활괄호가 그냥 재미로 배치되어 있다고 생각합니다. 그러나 사실 꼭 필요합니다. 그렇게 해야 AHK가 {!}이 "느낌표"일 뿐 "Alt 키를 누르라"는 뜻이 아님을 이해합니다. 그래서 send 페이지에 있는 테이블을 꼭 암기하시고 괄호를 제 자리에 배치하십시오.

;  !가 {} 안에 있는 것에 주목하십시오. 그렇지 않으면  AHK가
;  ALT 키를 눌러 버리기 때문입니다.
send, This text has been typed{!}
; 위와 같지만,  이 번에는 ENTER 키입니다. AHK는 "enter"를 타자해 버립니다...
; ... {} 안에 싸여 있지 않다면 말입니다.
send, Multiple enter lines have enter been sent. ; 잘못됨
send, Multiple{enter}lines have{enter}been sent. ; 올바름
또다른 문제는 사람들이 send 명령어에서 모든 것들은 괄호에 싸 넣어야 한다고 생각한다는 것입니다. 그렇지 않습니다. 표에 없으면 괄호가 필요하지 않습니다. 일반적인 기호와 숫자 심지어 어떤 심볼들은 괄호에 싸 넣을 필요가 없습니다 (예를 들어 {}'s.에서 점)
또한, Send 명령어로 1 개 이상의 기호나 숫자 또는 심볼을 단 번에 보낼 수 있습니다. 그래서 1 개의 기호마다 따로따로 수 많은 Send 명령어를 사용할 필요가 없습니다.
; 위에 언급한 테이블에 없는 기호나 단어들을 따로 괄호에 싸 넣지 마십시오.
send, {a}       ; 잘못됨
send, {b}       ; 잘못됨
send, {c}       ; 잘못됨
send, {a}{b}{c} ; 잘못됨
send, {abc}     ; 잘못됨
send, abc       ; 올바름
키를 누르거나 떼려면, 키 이름을 괄호로 둘러 싸고 UP이나 DOWN을 사용합니다.
; 다음은 키 하나를 누름과 동시에 또다른 키 (또는 키들)을 누르는 방법입니다.
; 한가지 방법이 작동하지 않으면, 다른 방법을 시도해 보십시오.
send, ^s                     ; 둘 다 CTRL+s를 전송합니다.
send, {ctrl down}s{ctrl up}  ; 둘 다 CTRL+s를 전송합니다.
Send, {ctrl down}c{ctrl up}
Send, {b down}{b up}
Send, {TAB down}{TAB up}
Send, {Up down}  ; 위 화살표 키를 누릅니다.
Sleep, 1000      ; 일 초 동안 누르고 있습니다.
Send, {Up up}    ; 위 화살표 키를 뗍니다.
그러나 이제 궁금하실 겁니다. "정말 긴 send 명령어들을 어떻게 잘 읽을 수 있지?". 쉽습니다. 계속 섹션을 사용하면 됩니다. 그냥 새 줄에 반괄호를 열고, 내용을 넣고, 마지막으로 반괄호로 줄을 닫습니다. 더 자세한 정보는 계속 섹션을 참조합니다.
send,
(
첫 번째 줄
두 번째 줄
원하는 만큼 줄을 배치할 수 있습니다.
)

주의: 다양한 형태의 전송 방법이 있습니다. 각자 따로 특별한 특징이 있습니다. 이 중에 하나로 여러분의 필요를 충족하지 못하면, 또다른 종류의 전송 형태를 시도해 봅니다. 그냥 명령어 이름을 "send"에서 "sendPlay" 또는 원하는 아무것이나 시도해 봅니다.
다음은 텍스트를 전송하는 가장 흔한 방법입니다:
Send
SendRaw
SendInput
SendPlay
SendEvent
각자 어떤 일을 하는지에 관한 더 자세한 정보는 여기를 읽어 보십시오.

a. 게임

중요합니다!
많은 게임은, 특히 현대의 게임은, 속이는 것을 방지하는 기능이 있습니다. 예를 들어, 이런 종류의 게임으로는 GameGuard, Hackshield, PunkBuster, 등등이 있습니다. 게임이 속임 방지 시스템이 있고 핫키와 핫스트링 그리고 send 명령어가 작동하지 않는다면, 안타까운 일입니다.
이런 시스템을 우회하는 일은 게임사의 정책을 위반하는 것이며 그러면 여러분은 제명 당할 수 있습니다. 해결책은 대단히 복잡합니다. 어떤 게임에서는 작동의 기회를 높일 수 있는 방법이 있지만, 마법의 "당장 게임에서 작동하라" 버튼은 없습니다. 그래서 포기하기 전에 이 모든 것들을 시도해 보십시오.

DirectX와 관련된 문제도 있습니다. 문제가 있고 게임이 DirectX를 사용한다면, 아래의 방법을 시도해 보십시오. 가능하면 창(Windowed 역주: 입력 방식을 전적으로 운영체제에 맡김) 모드에서 시험해 보십시오. 그러면 DirectX 문제가 해결될 지도 모릅니다.
픽셀이나 이미지 명령어를 사용할 때, DirectX 문제가 더 많이 일어날 수도 있습니다. 어떤 색을 얻으려고 시도하는지에 상관없이 색깔이 검정색으로 바뀔 수 있습니다 (0x000000). 그것은 해결하기 어려운 또다른 문제입니다. 되도록이면 Windowed 모드에서 실행해 보십시오.

AutoHotkey를 모든 프로그램에서 작동하시키는 단 한가지 해결책은 없습니다. 시도한 모든 것이 실패한다면, 안타깝게도 AutoHotkey로는 여러분의 요구를 만족시킬 수 없는 것입니다.


FAQ 페이지에서 인용합니다:
어떤 게임은 DirectInput를 단독으로 사용합니다. 그 부작용으로, 모든 시뮬레이션 키눌림과 마우스 클릭을 무시해 버립니다. 이를 해결하려면, 다음 중 하나를 (또는 조합해서) 시도해 보십시오:
  • 다음을 통하여 SendPlay를 사용합니다. : 1) SendPlay 명령어를 사용합니다; 2) SendMode를 사용합니다; 그리고/또는 3) 핫스트링 옵션인 SP를 사용합니다.
  • SetKeyDelay의 지연시간을 늘려 봅니다. 예를 들어:
  • SetKeyDelay, 0, 50
  • SetKeyDelay, 150, 150, Play
  • ControlSend를 시도해 봅니다. 다른 Send 모드가 모두 실패하더라도 이 방법은 작동할 가능성이 있습니다.

4 - 프로그램 & 웹사이트 실행하기

Mspaint.exe, Calc.exe, script.ahk 심지어 폴더 같은 프로그램을 실행하려면, Run 명령어를 사용할 수 있습니다. 심지어 http://ahkscript.org/과 같이 URL에도 사용할 수 있습니다. 원하는 프로그램의 유형을 실행하도록 컴퓨터가 환경이 설정되어 있다면, 아주 간단합니다:
; 프로그램을 실행합니다. 주의: 대부분의 프로그램은 전체 파일 경로를 요구합니다.
Run, %A_ProgramFiles%\Some_Program\Program.exe

; 웹 사이트를 실행합니다
Run, http://ahkscript.org
명령어-줄 매개변수와 CLSID와 같은 다른 고급 특징들도 역시 있습니다.
더 알고 싶다면 이 페이지를 참조합니다.
다음에 몇 가지 예를 더 보여줍니다:
;  윈도우즈의 표준 프로그램들과 같이 전체 경로가 필요하지 않은 프로그램이 있습니다.
Run, Notepad.exe
Run, MsPaint.exe

; 내장 AHK 변수를 사용하여 "My Documents" 폴더를 엽니다.
Run, %A_MyDocuments%

; 웹 사이트를 실행합니다
Run, http://ahkscript.org
Run, http://www.google.com

더 깊은 정보와 더 많은 예제는 다음을 참조합니다:
commands/Run.htm.

5 - 명령어 vs. 함수

오토핫키는 코드를 만드는데 사용되는 크게 두 가지 유형이 있습니다:
명령어와 함수가 그것입니다

도움이 되는 링크:
모든 명령어 목록: commands/index.htm
모든 내장 함수 목록: Functions.htm#BuiltIn

명령어

그의 구문을 보면 (그의 겉 모습으로) 명령어인지 아닌지 구분할 수 있습니다. 명령어는 매개변수에 반괄호"()"를 사용하지 않지만 함수는 사용합니다. 그래서 명령어는 다음과 같이 보입니다:
Command, parameter1, parameter2, parameter3

명령어를 사용할 때, 다른 명령어를 같은 줄에 놓을 수 없습니다 (예외: ifEqual).
명령어를 다른 명령어의 매개변수 안에 놓을 수 없습니다.

Msgbox, Hello Run, Notepad.exe   ; 잘못됨
Msgbox, Hello, Run, Notepad.exe  ; 잘못됨

Msgbox, Hello      ; 올바름
Run, Notepad.exe
명령어는 또 "전통적인 구문"을 사용한다는 점에서 함수와 다릅니다. 그 의미는: 변수를 사용할 때, 그 둘레에 %를 사용할 필요가 있다는 뜻입니다. %variable%. 텍스트와 숫자는 "인용 부호" 안에 있을 필요가 없습니다: 예, This is some text. 게다가, 함수와는 다르게 매개변수 안에서 수학식을 사용할 수 없습니다.

매개변수에 수학식을 사용할 수는 있습니다. 강제로 % 기호로 표현식을 만들면 되지만, 이에 관해서는 다루지 않겠습니다.

함수

위에 언급한 바와 같이, 함수는 반괄호를 사용하기 때문에 다릅니다. 전형적인 함수의 모습은 다음과 같습니다:
Function(parameter1, parameter2, parameter3)

함수는 몇 가지 큰 차이점이 있습니다:
  1. 그 안에 수학식을 사용할 수 있습니다.
    -- SubStr(37*12, 1, 2)
    -- SubStr(A_Hour-12, 2)
  2. 변수는 퍼센트 기호로 둘러쌀 필요가 없습니다.
    -- SubStr(A_Now, 7, 2)
  3. 함수는 함수 안에 들어갈 수 있습니다.
    -- SubStr(A_AHKPath, inStr(A_AHKPath, "AutoHotkey"))
  4. 텍스트는 인용부호로 둘러싸야 합니다.
    -- SubStr("I'm scripting, awesome!", 16)
함수는 명령어와 다르게 보통 값을 돌려줍니다. 명령어는 OutputVar 매개변수가 필요하지만, 함수는 그렇지 않습니다. 변수를 함수의 값에 할당하는 가장 일반적인 방식은 다음과 같습니다:
MyVariable:=Function(Parameters)
MyVariable:=SubStr("I'm scripting, awesome!", 16)

이것만이 유일한 방법은 아닙니다. 그러나 가장 많이 사용되는 방법입니다. MyVariable 변수를 :=의 오른쪽에 있는 함수의 값으로 할당하고 있습니다 (이 경우, SubStr(...)).
함수에 관하여 더 자세한 것은 여기를 참조합니다.

짧게 말해:
; 다음은 명령어입니다
Msgbox, 이것은 텍스트입니다.
StringReplace, Output, Input, AutoHotKey, AutoHotkey, ALL
SendInput, 이거 정말 굉장하네요{!}{!}{!}

; 다음은 함수입니다
SubStr("스크립팅을 하고 있어요, 정말 죽여주네요!", 16)
FileExist(VariableContainingPath)
Output:=SubStr("스크립팅을 하고 있어요, 정말 죽여주네요!", 16)

a. 코드 블록

코드 블록은 활괄호 안에 있는 것들입니다 ({ 그리고 }). 한 그룹의 단위로 묶어 주므로 AutoHotkey는 그것을 함께 있어야 하는 하나의 커다란 가족으로 인식합니다. If 그리고 Loop와 함께 가장 많이 사용됩니다. 이것이 없다면, 블록에서 첫 줄만 호출됩니다.

다음 코드에서, 두 줄 모두 var가 5와 같은 경우에만 실행됩니다.
if (var=5)
{
   MsgBox, var equals %var%!!
   Exitapp
}

다음 코드에서, msgbox는 var가 5일 경우에만 보입니다. 코드는 var가 5가 아닐지라도 언제나 스크립트는 종료합니다.
if (var=5)
   MsgBox, var는 %var%와 같습니다!!
   Exitapp

이것은 첫 번째 줄의 코드와 연관되어 있을 경우에만 완벽하게 좋습니다. 정확하게 위와 똑같지만, 두 번째 줄은 내어 썼으므로 if와 분할되어 있음을 알 수 있습니다.
if (var=5)
   MsgBox, var는 %var%와 같습니다!!
MsgBox, 이제 if 서술문 '밖에' 있습니다. 아래에 한 줄만 있기 때문에 {}이 필요하지 않습니다.

6 - 변수

변수는 작은 포스트잇 메모지처럼 그 안에 정보를 담습니다. 텍스트나, 숫자, 그리고 함수나 명령어 심지어 수학 방정식으로부터 얻은 데이터를 저장하는 데 사용합니다. 변수가 없다면 프로그래밍 & 스크립팅은 정말 짜증나는 일이 될 것입니다.


변수는 몇 가지 방법으로 할당할 수 있습니다. 여기에서는 가장 흔한 방법을 다루겠습니다. 등호 기호(=)에 주목해 주십시오.
  1. variable=text
    가장 간단한 형태로, 전통적인 할당 방식입니다. 그냥 텍스트를 타자해 넣으면 그걸로 끝입니다.
  2. variable=%variable2%
    위와 같지만, 변수를 다른 변수 값에 할당하고 있습니다.
  3. variable:="text"
    = 앞에 있는 : 때문에 표현식 할당이라고 부릅니다. 텍스트는 "인용부호" 처리해 주어야 합니다.
  4. variable:=variable2
    표현식 모드에서 변수는 %가 필요하지 않습니다.
  5. variable:=6+8/3*2-sqrt(9)
    표현식 덕분에, 수학 계산을 할 수 있습니다!
숫자 1 & 2 를 결합해 사용할 수 있습니다. var=%var2% some text %var3%.
3, 4 & 5 도 역시 결합할 수 있습니다. var:="The value of 5+ " Variable " is: " 5+Variable

앞에 심볼이 있는 모든 등호 기호(=)는 할당 연산자라고 부릅니다. 언제나 표현식입니다. ] 그래서 := += -= .= 등등은 언제나 표현식을 사용합니다.

a. 퍼센트 기호를 사용해야 할 때

변수와 관련하여 오토핫키에서 가장 많이 제기되는 문제중 하나는 언제 퍼센트 기호 (%)를 사용하는가 하는 것입니다. 다음 설명으로 깔끔하게 혼란이 제거되기를 바랍니다.

%를 사용해야 할 때:
  1. 명령어를 사용할 때 (위 참조) 퍼센트 기호를 사용합니다.
    -- 매개변수가 OutputVar이거나 InputVar일 경우는 제외합니다.
  2. 전통적인 모드를 사용하는 변수에 변수를 할당할 때 (앞에 심볼이 없는 등호 기호).
%를 사용하면 안될 때:
  1. 매개변수가 입력변수이거나 출력 변수일 경우, 예를 들어: StringLen, OutputVar, InputVar
  2. 할당의 왼쪽에 있을 때: Var = 123abc
  3. 전통적 (비-표현식) if-서술문의 왼쪽에: If Var1 < %Var2%
  4. 표현식 안에. 예를 들어:
    If (Var1 != Var2)
       Var1 := Var2 + 100
    

b. 사용자 입력 얻기

종종 사용자가 값을 채워 넣어주기를 바랄 경우가 있습니다. 여러 가지 방법이 있지만, 가장 간단한 방법은 Inputbox입니다. 다음은 간단한 예입니다. 사용자에게 두 가지 질문을 하고 그 답을 가지고 무슨 일을 합니다.
InputBox, OutputVar, Question 1, 이름이 무엇입니까?
if (OutputVar="Bill")
   MsgBox, 멋진 이름이군요, %OutputVar%.

InputBox, OutputVar2, Question 2, 오토핫키를 좋아합니까?
if (OutputVar2="yes")
   MsgBox, %OutputVar2%`라고 답해 주셔서 고맙습니다. %OutputVar%! 여러분의 훌륭한 친구가 되어 드리겠습니다.
else
   MsgBox, %OutputVar%`, 정말 슬프군요.

c. 다른 예제들?

MsgBox, 4, , 계속하시겠습니까?
IfMsgBox, No
   Return                ; No이면, 코드를 멈춥니다.
MsgBox 당신은 YES를 눌렀습니다.  ; 그렇지 않으면, 사용자는 yes를 고른 것입니다.
; 퍼센트 기호를 사용해야 할 때와 하지 말아야 할 때는 보여주는 몇 가지 예들
Variable=text                      ; 변수에 텍스트를 할당합니다. '전통적인' 할당방식입니다.
VariableNumber:=6                  ; 변수에 숫자를 할당합니다. '표현식' 할당입니다.
Variable2=%Variable%               ; 변수를 또다른 변수에 할당합니다. 전통적인 할당을 사용합니다.
Variable3:=Variable                ; 변수를 또다른 변수에 할당합니다. 표현식 할당입니다.
Variable4.=Variable                ; 변수를 또다른 변수의 끝에 추가합니다. 표현식 할당입니다.
Variable5+=VariableNumber          ; 변수의 값을 또다른 변수에 추가합니다. 표현식 할당입니다.
Variable5-=VariableNumber          ; 변수의 값을 또다른 변수로부터 뺍니다. 표현식 할당입니다.
Variable6:=SubStr(Variable, 2, 2)  ; 함수 안의 변수입니다. 이것은 언제나 표현식 할당입니다.
Variable7=%Variable% Text          ; 변수를 또다른 변수에 약간의 텍스트오 함께 할당합니다. 전통적인 할당을 사용합니다.
Variable8:=Variable " Text"        ; 변수를 또다른 변수에 약간의 텍스트와 함께 할당합니다. 표현식 할당을 사용합니다.
MsgBox, %Variable%                 ; 명령어 안의 변수입니다. 
StringSplit, Variable, Variable, x ; InputVar와 OutputVar를 사용하는 명령어 안의 변수입니다.
if (VariableNumber=6)              ; IF에 괄호가 있을 때마다, 그것은 표현식입니다. 그래서  %를 사용하지 않습니다.
If (Variable != VariableNumber)    ; IF에 괄호가 있을 때마다, 그것은 표현식입니다. 그래서  %를 사용하지 않습니다.
if VariableNumber=6                ; 괄호가 없으면, 그 if는 전통적입니다. 그렇지만, '오른쪽에 있는' 변수만 %가 필요합니다. 
If Var1 < %Var2%                   ; 괄호가 없으면, 그 if는 전통적입니다. 그렇지만, '오른쪽에 있는' 변수만 %가 필요합니다. 

7 - 객체

객체는 좀 더 효율적으로 사용하기 위해 데이터를 조직하는 방법입니다. 종종 객체는 배열이라고 지칭되기도 합니다. 그러나 모든 배열은 그냥 객체일 뿐이라는 사실을 인식하는 것이 중요합니다. 객체를 어디에 사용하려고 하는가에 따라 다르게 부르기도 하지만, 그 모든 객체는 같은 것입니다.


객체는 기본적으로 변수 집합입니다. 변수 이름은 "키"라고 알려져 있고, 그 변수의 내용은 "값"이라고 합니다.

객체를 배열 또는 인덱스 배열이라고 부른다면, 보통 모든 키가 1부터 시작해서 연속적으로 증가하는 숫자라는 뜻입니다.
객체를 연관 배열이라고 부른다면, 키가 문자열(텍스트)이거나 아니면 비-연속 숫자들이라는 뜻입니다. 종종, 그 둘은 혼용됩니다. 연속 숫자도 마찬가지입니다!

키나 값이 무엇인지는 제한이 없습니다. 심지어 다른 배열이 될 수도 있습니다!
값이 또 배열이면, 이것을 내포 배열이라고 부릅니다. 이에 관해서는 나중에 설명드리겠습니다.
객체를 사용하고 싶은 이유가 많이 있습니다. 예를 들면:
  1. 번호 리스트를 사용하고 싶습니다. 예를 들어, 장보기 목록 같은 경우이겠지요 (이것은 인덱스 배열이라고 지칭됩니다)
  2. 격자를 표현하고 싶습니다. 아마도 보드 게임에 사용하실 생각이겠지요 (이것은 내포 객체로 만들 수 있습니다)
  3. 각각에 이름이 있는 물품 목록이 있습니다. 예를 들어 과일의 특징에 맞추어 이름을 적용할 수 있습니다 (이것은 연관 배열이라고 부릅니다)

a. 객체 만들기

객체를 만들려면 몇 가지 방법이 있습니다. 가장 흔한 방법은 아래와 같습니다.
  1. MyObject := ["one", "two", "three", 17]
    각괄호 구문입니다. 이것으로 "인덱스 배열"을 만들 수 있습니다. 인덱스 배열은 항목 리스트를 1부터 쭈욱 나열해 보여주는 객체입니다. 이 예제에서, 값 "one"은 객체 키1에 저장됩니다 (인덱스 1), 그리고 값 17은 객체 키 4에 저장됩니다 (인덱스 4).
  2. Banana := {"Shape": "Elongated", "Color": "Yellow", "Taste": "Delicious", "Price": 3}
    활괄호 구문입니다. 이것으로 "연관 배열"을 정의할 수 있습니다. 연관 배열은 각 항목에 이름이 있는 데이터 집합입니다. 이 예제에서 값 "yellow"는 객체 키 "color"에 저장됩니다. 또, 값 3은 객체 키 "Price"에 저장됩니다.
  3. MyObject := Array("one", "two", "three", 17)
    "배열" 생성 함수입니다. 이 함수는 각괄호 구문과 동등하지만, 함수에 싸여 있습니다.
  4. Banana := Object("Shape", "Elongated", "Color", "Yellow", "Taste", "Delicious", "Price", 3)
    객체 생성 함수입니다. 이 함수는 활괄호와 동등하지만, 함수에 싸여 있습니다.
이 모든 정의가 같은 것(객체)을 만들어 낸다는 것을 기억하는 것이 중요합니다. 단지 키가 다를 뿐입니다.

b. 객체 사용하기

객체를 사용하는 방법이 여러가지가 있습니다. 값을 열람하기, 값을 설정하기, 값을 추가하기, 등등이 포함됩니다.

값을 설정하려면:
객체에 값을 설정하는 일은 변수에 값을 설정하는 것 만큼이나 단순합니다.
그냥 (열람 섹션에서 보시듯이) 표현식 할당 심볼 :=의 왼쪽에.
각괄호나 점 표기법을 배치하기만 하면 됩니다.
예를 들어:
Banana.Consistency := "Mushy"
Banana["Pickled"] := True ; 이 바나나는 절인 바나나입니다. 우웩.

값을 열람하려면:
  1. Value := Banana["Color"]
    각괄호 표기법입니다. 표현식을 키로 사용하여 객체로부터 값을 얻을 수 있습니다. 이 경우, 간단한 표현식 "Color"를 사용했습니다. 이것이 (당연히) 키 Color입니다. 메시지 박스에 "Yellow"라는 단어가 나타날 텐데, 이것은 앞 섹션에서 키 Color에 할당했던 값입니다.
  2. Value := Banana.Color
    점 표기법입니다. 이 방법은 기호 문자열만 키로 사용할 수 있습니다. 변수는 키로 사용할 수 없습니다.

새 키와 값을 추가하려면:
  1. 직접적으로 값을 추가하기
    직접적으로 키와 값을 추가하려면, 그냥 존재하지 않는 키를 설정하기만 하면 됩니다. 예를 들어:
    MyObject.NewKey := "Shiny"
    MyObject["NewerKey"] := 3.1415
  2. 값을 삽입하기
    객체에 키와 값을 추가하는 또다른 방법은 다음 방법 중 하나를 사용합니다.

    MyObject.InsertAt(Index, Value1, Value2, Value3...)
    Index는 정수 키입니다. 이렇게 하면 삽입할 때마다 이 값보다 더 높은 모든 키들이 위로 이동합니다. 틈이 있어도 이동합니다. (예를 들어, 키가 1부터 100 까지만 존재하고, 값을 키 50에 삽입하면, 100은 101로 이동합니다).

    MyObject.Push(Value1, Value2, Value3...)
    이렇게 하면 MyObject배열의 끝에 값이 "추가됩니다". 다른 말로 해서, 값을 가장 높은 정수키보다 하나 더 큰 위치에 삽입합니다.

키와 값을 삭제하려면:
  1. 값을 제거하기.
    가장 쉽게 값을 제거하는 방법은 그냥 없애 버리는 것입니다. 그냥 ""로 설정하면 됩니다. 빈 문자열이라고 부릅니다. 이것으로는 키가 제거되지 않지만, 값이 설정되지 않은 값과 동일하게 보이도록 만듭니다.
    HasKey 메쏘드를 사용하면 키가 여전히 존재한다고 알려줄 수 있습니다. 그러면 여전히 for 회돌이에 나타날 것입니다. (회돌이에 관해서는 나중에 자세히 말씀드리겠습니다)
  2. 키를 제거하기
    키와 값을 제거하는 몇 가지 다른 방법이 있습니다:
    1. RemovedValue := MyObject.Delete(AnyKey)
      MyObject[AnyKey]의 이전 값은 RemovedValue에 저장됩니다.
    2. NumberOfRemovedKeys := MyObject.Delete(FirstKey, LastKey)
      이런식으로 제거하면 FirstKey와 LastKey 사이의 숫자/정수 또는 문자열 키를 몽땅 제거할 수 있습니다.

      돌려받는 값은 제거된 키의 개수입니다. 이것은 키 사이에 틈이 있을 때 유용합니다 (예를 들어, 키를 1부터 4까지 지정했지만, 키 2는 존재하지 않는다면, NumberOfRemovedKeys가 3으로 설정되고 세 개의 키만 제거됩니다)
    3. MyObject.Pop()
      가장 높은 정수 키가 제거되고, 그 값을 돌려줍니다. 영향을 받을 더 높은 키는 전혀 없습니다.
    4. RemovedValue := MyObject.RemoveAt(Index)
      NumberOfRemovedKeys := MyObject.RemoveAt(Index, Length)
      Index부터 Index + Length - 1 (포함e)까지 모든 키들이 삭제됩니다. Length를 생략하면 1이 기본값입니다. 키를 제거한 다음 이 보다 높은 모든 숫자/정수 키들을 위로 올려서 틈을 메웁니다. 그래서 값이 Index + Length에 있었다면 이제 그 값은 Index에 있습니다. 이 방식은 여러 값이 지정된 InsertAt 메쏘드의 작동 방식과 비슷합니다.

8 - 기타 등등 도움

이제 여행의 막바지에 다다랐습니다. 모쪼록 무언가를 배웠기를 바랍니다. 그러나 끝내기 전에, 여러분이 꼭 알아야 한다고 생각하는 다른 것들을 여기에 제시합니다. 즐거운 시간 되시기를!

a. 신비한 []

문서를 통하여, 다음 두 심볼이 보일 겁니다 ([ 그리고 ]). 거의 모든 페이지 상단에 노란색 구문 박스 안에서 코드를 둘러 싸고 있지요. 이 각활호 안에 든 모든 것들은 선택적입니다. 그 안에 든 것들은 필요 없으면 생략해도 된다는 뜻입니다. 코드를 작성할 때, [] 는 절대로 타자하지 않습니다.

ControlGetText 페이지에서 이것을 보실 수 있습니다 (색깔 없이):
ControlGetText, OutputVar [, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

그래서 그냥 원하다면 이렇게 해도 됩니다:
ControlGetText, OutputVar

또는 좀 더 세밀하게 이렇게 해도 됩니다:
ControlGetText, OutputVar, Control, WinTitle

ExcludeTitle를 사용하고 싶지만 WinText나 WinTitle은 채우고 싶지 않다면? 간단합니다!
ControlGetText, OutputVar, Control,,, ExcludeTitle

매개변수는 무시할 수 없습니다. 그냥 빈 채로 놓아 두는 것은 괜찮습니다.
"WinTitle, WinText"를 무시해 버리면, 다음과 같이 보일 것이고 문제를 일으킵니다:
ControlGetText, OutputVar, Control, ExcludeTitle
다음은 유효합니다.
ControlGetText, OutputVar, Control,,, ExcludeTitle

b. AHK 버전 알아내기

다음 코드를 실행하면 AHK 버전을 볼 수 있습니다:
MsgBox, %A_AHKVersion%
또는 "AutoHotkey 도움말 파일" 또는 "AutoHotkey.chm"을 시작 메뉴나 설치 디렉토리에서 찾아 보십시오.

c. 시행 착오

시행 착오는 배움에서 아주 흔하고 효과적인 방법입니다. 모든 것들에 도움을 구하는 대신에, 좀 혼자만의 시간을 가지고 (몇 시간이나 몇 일 동안) 작동시켜 보려고 시도하는 것이 더 빨리 배우는데 도움이 되실 겁니다.

뭔가를 시도해 보고 에러를 맞이해 보면서, 그 에러를 연구합니다. 다음 코드를 수정한 다음, 다시 시도해 봅니다. 여전히 에러를 맞이한다면, 코드를 좀 더 수정합니다. 코드가 더 이상 실패하지 않을 때까지 계속 시도와 실패를 거듭합니다. 문서를 읽고, 에러를 읽고 무엇이 작동하고 무엇이 작동하지 않는지 배우면서 많은 것을 배우실 겁니다. 시도, 실패, 시도, 실패,시도, 실패, 시도, 실패, 성공!

이 방법으로 수 많은 "프로들이" 배웠습니다. 그러나 도움을 구하는 데 두려워하지 마십시오. 면박당하지 않습니다. 배우는 데는 시간이 필요하며, 여러분이 만나는 "프로"가 단 몇 시간 몇 일 만에 배워서 마스터가 된 것이 아닙니다.

"처음에는 성공하지 못하더라도, 다시 시도, 또 시도, 시도하라." - Hickson, William E.

d. 들여쓰기

들여쓰기는 아주 중요합니다! 코드는 완벽하게 실행되지만, 코드를 읽을 때 심각한 두통거리가 될 것입니다. 작은 코드라면 (25 줄 이하) 아마도 들여쓰기가 없더라도 읽는데 문제가 없겠지만, 조만간 어려워질 겁니다. 되도록이면 빠리 들여쓰기를 배우는 편이 제일 좋습니다.
들여쓰기는 특별한 스타일이 없지만, 일관성을 유지하는 것이 제일 좋습니다.
"들여쓰기란 무엇인가?" 아마도 이렇게 묻고 싶겠지요? 무엇이 무엇에 속해 있는지 보기 위해 코드를 간격을 두어 쪼개는 것입니다. 사람들은 한 레벨 당 보통 3 이나 4 개의 공백 또는 한 개의 탭을 사용합니다.

들여쓰기 없음:
if (car="old")
{
msgbox, the car is really old
if (wheels="flat")
{
msgbox, this car is not safe to drive.
Return
}
else
{
msgbox, Be careful! This old car will be dangerous to drive.
}
}
else
{
msgbox, My`, what a shiny new vehicle you have there.
}
들여쓰기함:
if (car="old")
{
   msgbox, 자동차가 정말 오래되었습니다
   if (wheels="flat")
   {
      msgbox, 이 자동차는 운전하기에 안전하지 않습니다.
      Return
   }
   else
   {
      msgbox, 주의하세요! 이 구형 자동차는 운전하기에 위험합니다.
   }
}
else
{
   msgbox, 와우`, 정말 멋진 자동차를 가지셨군요.
}
Wiki에 다양한 스타일과 예제가 있습니다. 여러분이 읽기에 가장 쉽다고 생각하는 스타일을 골라 들여쓰기 하는 법을 배우십시오.
http://en.wikipedia.org/wiki/Indent_style

e. 도움 요청하기

물어보기 전에, 먼저 스스로 연구해 봅니다. 또는 스스로 코드해 봅니다. 결과가 만족스럽지 못하다면, 아래를 읽어 보십시오.
  • 두려워 하지 말고 도움을 청합니다. 가장 똑똑한 사람들조차 다른 이에게 도움을 구합니다.
  • 무엇을 시도하고 있는지 두려워 하지 말고 보여줍니다. 심지어 말도 안되는 것이라고 생각할지라도 말입니다.
  • 시도해 본 것들을 모두 게시합니다.
  • 여러분을 제외하고 누구든 멍청해서 아무것도 모른다고 생각하십시오. 되도록이면 많은 정보를 주어서 바보들에게 무엇을 하려고 하는지 일깨워 주십시오. 우리를 돕는 것이 바로 여러분을 돕는 것입니다.
  • 인내 하십시오.
  • 정중 하십시오.
  • 다음을 여십시오.
  • 친절 하십시오.
  • 즐기십시오
바로 답을 얻지 못하더라도, 적어도 하루 (24 시간)은 기다린 후에 도움을 더 요청합니다. 우리도 기꺼이 도와주고 싶지만, 시간이 나야 도와줄 수 있습니다. 일을 하고 있을 수도 있고, 잠자거나, 게임하거나, 가족과 함께이거나 아니면 그냥 바쁠 수 있습니다.
도움을 기다리는 동안, 스스로 시도하면서 배울 수 있습니다. 도움없이 스스로 뭔가를 이루면 큰 보람을 느끼실 것입니다.

f. 다른 링크들

자주 묻는 질문들 (FAQ)