https://autohotkey.com/docs/Tutorial.htm#s11
1. 핫키 입력은 핫키뒤에 :: (콜론 두개 붙임)
return문 위까지 여러개의 줄이 순차적으로 수행됨
2. send명령은 print문처럼 출력하려면 send, 뒤에 문장만쓰면되는데 여기에 특수문자는 {}로 묶어서 써야함. 안묶을시 문자열입력 말고 키입력도 가능함.
가령 ^j::
send, ^j하면 루프에 빠뜨릴수도 있음
3. msgbox, 뒤에는 {}로 안묶어도 바로 써놓은 내용이 텍스트로 만들어져서 출력됨.
4. 핫키입력은 윈도우 디폴트 키보다 핫키가 우선순위가 적용됨. 가령 #D::를 동작하는 순간 바탕화면 보기가 수행이 되지않음
5. ahk_class는 대소문자 구별함
가령, 그림판의 클래스를 가저와서 동작하게 하려면
#IfWinActive ahk_class MSPaintApp인데 MSPaintApp이 한글자라도 대소문자 틀리면 해당 내용 아래의 조건식이 동작안함.
6. 프로그램은 한글영어 구별함
예제 Untitled - Notepad를 그대로
WinActivate, Untitled - Notepad
#IfWinActive Untitled - Notepad
쓰고 메모장에서 실행해도 효과 없음
제목 없음 - 메모장이라고 해야함
참고로 위의 구문은 Notepad를 활성화시키라는 명령이고
두번째조건문은 활성화 되어있다면 아래의 스크립트를 수행하라는 명령이다.
7. 명령어는 대소문자 구별 없음
send나 Send나 동일
변수도 대소문자 구별 없음 MyVar나 Myvar나 같은 변수임.
8. Bold태그 예제
^b:: ; CTRL+B hotkey
Send, {Ctrl down}c{Ctrl up} ; Copies the selected text. ^c could be used as well, but this method is more secure.
SendInput, [b]{Ctrl down}v{Ctrl up}[/b] ; Wraps the selected text in BBCode tags to make it bold in a forum.
return ; This ends the hotkey. The code below this point will not get triggered.
(1) return문이 hotkey 적용을 끝낸다는 뜻이구나
(2) enter키가 문단끝에 포함시 [/b]가 아래로 내려감. 즉 버그 수정이 필요한 미완의 구문
(3) Send와 SendInput의 차이는 무엇일까
9. SciTe4AutoHotkey에서
수정 후 F5로 소스코드를 빌드하면
"An older instance of this script is already running. Replace it with this instance?
Note: To avoid this message,l see #SingleInstance in the help file.
너무 당연한 이야기지만"예"를 눌러야 변경한게 적용이 됨. 읽지않고 귀찮아해서 간과할수 있던 사실임.
10. 핫키를 쓸때는 마지막키에 쎄미콜론을 붙여야 문법이 성립됨
0 & 1 :: -> 에러
0 & 1:: ->옳은 문법
11. & ampersand를 쓸 때의 문제점
& 엠퍼센드는 앞의 키를 누른 상태에서 뒤의 키를 눌렀을 때 발동 되는 것인데
앞의 키를 핫키로 써버리면 그 키를 그냥 눌렀을때는 아무런 동작을 하지 않는 문제점을 가지게 됨. 이를 해결하려면 그 숫자::그숫자 구문을 한줄 추가로 해결이 가능
무슨말이냐하면
0 & 1:: -> 0을 못쓰게됨
` & 1:: -> `을 못쓰게 됨
0::0을 한줄추가하면 -> 0을 누를때 0이 나옴
`::` 한줄추가 -> `을 누를때 `가 나옴
단, 길게 누를때 계속 글자가 반복 출력되는 것은 이제 못하게 됨. 가령
000000000000````````````````이렇게 누르고 있을때 출력못하고 0` 하나씩만 찍히고 만다.
12. 변수 대입과 출력 방법
변수에 대입에는 두 가지 방볍이 있다. =과 :=이 그것이다.
c언어처럼 별도로 자료형을 선언하거나 하지 않는다.
변수 대입에 문자열 입력시 =는 ""없이 써도 되나 := 사용시 반드시 ""를 붙여야 한다.
변수 대입에 :=을 사용하는 경우, 함수나 수식 계산의 결과값을 변수에 저장할 수 있다.
변수 출력은 변수 앞뒤로 %를 둘러싸면 된다.
예)
Var1 = Hello World! ; 옳음
Var2 := "Hello World!" ; 옳음
Var3 := Hello World! ; 틀림, !개수에따라 결과값은 홀수개 1과 짝수개 0이 반복
MyVar = Var1 ; Var1이라는 값이 들어감
MyVar := Var1 ;Var1변수가 가진 값이 들어감, 따라서 이렇게 써야 옳음
MyVar := 6 + 8 / 3* 2 - Sqrt(9)
MyVar := "The value of 5 + " MyVar2 " is: " 5 + MyVar2
13. MsgBox로 함수나 변수의 결과값을 보고싶으면 %를 붙이면 된다. 이 때 %의 앞 뒤로는 한칸 이상 띄워야 한다. ,는 붙여도 안붙여도 결과는 같고 수식이나 변수를 그대로 출력해버린다.
MsgBox The Value is %Var%.
MsgBox, The Value is %Var%.
MsgBox % "The Value is" . Var . "."
;.은 따옴표로 구성된 문자열과 변수를 이어주는 건데 생략도 가능
MsgBox % 6 + 8 / 3 * 2 - Sqrt(9)
;바로 수식의 결과값이 표시됨
MsgBox MyVar
MsgBox %MyVar%
MsgBox % MyVar
MsgBox % SubStr("123abc789", 4, 3) ; Returns abc
MsgBox SubStr("123abc789", 4, 3) ; Returns SubStr("123abc789", 4, 3)
14. Run, 명령어로 프로그램, 인터넷URL(웹브라우저), 폴더를 오픈할 수 있다.
예)
Run, %A_MyDocuments%
Run(,) C:\
15. 각종 변수
ClipBoard = 실제 클립보드에 저장된 값
A_Mydocuments = 내 문서 경로
A_Now = 현재날짜시간분초
20190510150838
^q::
Send %A_Now%
Send {Enter}
SendInput %A_MyDocuments%
Send {Enter}
Send %A_MyDocuments%
Send {Enter}
SendInput %A_Hour%
Send {Enter}
SendInput %Clipboard%
return
16. StringReplace : 클립보드에 \n을 \r\n으로 교체 가능한 문법 예시
SpringReplace17. 사용자에게 input값을 받는 강력한 InputBox라는 명령어가 있다. 마치 c언어의 scanf같은데 차이점은 scanf의 경우 사용자에게 할 질문을 printf로 먼저 출력하고 scanf로 입력대기 상태가 되는데 InputBox는 한문장으로 질문과 입력이 가능하다.
InputBox, Var , 팝업창제목,팝업창내용
의 형식을 가지며, 사용자에게 입력가능한 팝업이 뜬다. 입력한 값은 Var변수에 저장된다.