AutoHotkey에 대한 간략한 소개를 통해 자신만의 매크로와 단축키를 만들어 쓸수 있도록 도움을 주고자 합니다.
스크립트는 명령을 포함하는 프로그램 (AutoHotkey.exe)에 의해 실행되는 텍스트 파일입니다. 또한 단축키(hotkeys)와 단축문자열(hotstrings)을 포함할 수 있습니다. 또는 전체가 이들로 구성됩니다. 그러나 단축키(hotkeys)와 단축문자열(hotstrings)이 없을 때는, 스크립트가 실행되는 순간 순차적으로 처음부터 끝까지 명령을 이행할 것입니다.
새로운 스크립트 만들기:
'#'는 윈도우키를 의미 하는데 따라서 #space는 윈도우키를 누른 상태에서 Spacebar를 눌러야 hotkey가 활성화 됨을 나타냅니다. '::'의 뜻은 다음의 명령을 HotKey가 활성화 되었을 때 실행하라는 의미입니다. 따라서 전체적으로 보면 WIN키와 Spacebar를 동시에 누르면 google 웹사이트로 이동하라는 뜻이 됩니다. 위의 스크립트를 테스트 해 보고자 한다면 다음과 같이 하면 됩니다.
참고: 각 스크립트 파일은 많은 수의 단축키(hotkeys)와 단축문자열(hotstrings)들을 포함 할 수 있습니다. 또, 여러 스크립트 파일들이 각각 트레이 아이콘을 가진 상태에서 동시에 실행 될 수 있음을 기억하십시오.
Run 명령어는 프로그램의 실행, 문서 열기, URL 이동, 바로가기 아이콘(ShortCut) 실행 등에 사용 됩니다. 아래에 사용 예를 살펴 봅시다.
Run Notepad Run C:\My Documents\Address List.doc Run C:\My Documents\My Shortcut.lnk Run www.yahoo.com Run mailto:someone@somedomain.com
위의 사용 예에 단축키(hotkeys)를 지정하고 싶다면 아래와 같이 하면 됩니다. 처음 예제는 #n은 WIN+N 단축키를 지정했고, 아래 예제는 Ctrl+Alt+C를 지정 했습니다.
#n::Run Notepad ^!c::Run calc.exe
위의 두 예제는 명령어를 하나만 포함하고 있기 때문에 단일행단축키(Single-Line Hotkey)라고 합니다. 하나의 단축키(hotkeys)에 여러 명령어들을 실행 시키고자 한다면 단축키(hotkeys)를 정의한 후 Enter키를 눌러 다음 행에 명령어들을 입력한 후 마지막 행에 return으로 끝내는 구조를 사용하면 됩니다. 다음의 예를 봅시다.
#n:: Run http://www.google.com Run Notepad.exe return
만약 실행하고자 하는 프로그램이나 열고자 하는 문서의 연결프로그램이 시스템의 PATH에 잡혀 있지 않았다면 완전한 경로를 입력해 주어야 실행 할 수 있다는 것을 유의 하십시오.
Run %A_ProgramFiles%\Winamp\Winamp.exe
위의 예제에서 '%ProgramFiles%' 는 운영체제에 의해 관리되는 환경변수인데, C:\Program Files라고 쓰지 않고 환경 변수를 사용하게 되면 다른 컴퓨터에서도 무리 없이 동작할 가능성이 높게 됩니다. (다른 컴퓨터에는 Program Files 디렉토리가 D 드라이브에 있을 수도 있습니다.)
프로그램이나 문서가 종료 될 때 까지 기다리고 싶다면 Run 명령어 대신 RunWait 명령어를 사용하면 됩니다. 다음의 보기에서, MsgBox 명령은 메모장을 종료하기 전까지 실행되지 않습니다.
RunWait Notepad MsgBox 메모장이 종료 되었습니다.
시작 프로그램에 대한 자세한 내용과 전달 매개변수, 특정 작업 디렉토리, 프로그램 종료 코드에 대해 자세하게 알고 싶다면 이곳을 클릭하십시오.
Send 명령어를 사용하면 현재 활성화된 윈도우(가장 상위에 있는 윈도우)에게 키입력을 보낼 수 있습니다. 다음 보기는 Win+S 단축키가 활성화 될 때, 현재 활성화 된 윈도우(메모장이나 E-Mail편집기 등)에 자기 서명 정보를 전송 합니다.
#s::
Send Sincerely,{Enter}John Smith
return
{enter}라는 문장은 'Enter' 키의 약자로 Enter키를 누른 효과를 내게 합니다.
Send ^c!{tab}pasted:^v
위의 예제는 Ctrl+C 키입력, Alt+Tab 키입력, "pasted:"라는 키입력, Ctrl+V 키입력을 순서대로 보냅니다. 더욱 자세한 내용은 Send 명령어 목록을 참고하십시오.
마지막으로, 키입력을 줄여서 특정 단어를 쉽게 입력 할 수 있습니다. 이것을 단축문자열(hotstrings)이라고 합니다. 예를 들면, 메모장이나 기타 공란에 Btw를 입력할 때마다, "By the way"로 치환할 것입니다. 다음은 그 사용 예 입니다.
::btw::by the way
마우스 클릭: 활성화된 윈도우에 마우스 클릭 정보를 보내고자 한다면 먼저 클릭이 일어날 X,Y 좌표 정보를 먼저 알아야 합니다. AutoScriptWriter나 AutoHotKey에 포함된 Window Spy를 사용하면 X, Y 좌표 정보를 구할 수 있습니다.
클릭을 하지 않고 마우스를 이동 시키고 싶으면 MouseMove 명령어를 사용하고 마우스 드래그를 하고 싶다면 MouseClickDrag 명령어를 사용 합니다.
WinActivate 명령어는 윈도우를 활성화 하는데 사용 됩니다. 특정 윈도우의 존재 유무를 확인 하고자 한다면 IfWinExist 나 WinWait 명령어를 사용 합니다.
다음의 예를 봅시다.
IfWinExist 제목 없음 - 메모장
{
WinActivate
}
else
{
Run Notepad
WinWait 제목 없음 - 메모장
WinActivate
}
위의 예제는 먼저 "제목 없음 - 메모장"이라는 문자열이 타이틀 바에 있는 윈도우의 존재 유무를 검색 합니다. 만약 해당 문자열이 타이틀바에 있는 윈도우가 있다면 그 윈도우를 활성화 시키고 없다면, 메모장을 실행하고 "제목 없음 - 메모장"이라는 문자열을 가진 윈도우가 나타날 때까지 기다린 후 활성화 시킵니다.
일반적으로 많이 사용되는 윈도우 관련 명령어는 다음과 같습니다:
아래 예제는 두개의 버튼(YES와 NO)를 포함한 메세지 상자를 출력 합니다.:
MsgBox, 4, , 계속 하시겠습니까? IfMsgBox, No return ; 만약 사용자가 yes를 선택했다면 MsgBox 당신은 YES를 선택 하셨습니다.
InputBox 명령어를 사용하면 사용자에게서 문자열을 입력 받을 수 있습니다. FileSelectFile이나 FileSelectFolder 명령어는 사용자에게 파일이나 폴더를 선택할 수 있도록 합니다. 참고로 Gui 명령어를 사용하면 임의의 입력 화면이나 유저 인터페이스를 구현 할 수 있습니다.
Tip: 이미 위의 보기를 통해 알았겠지만, 상황에 따라 콤마를 생략 할 수 있습니다. 예를 들면:
MsgBox 괜찮습니다. MsgBox, 이것도 괜찮습니다. (콤마","를 넣었을 때)
먼저, 모든 변수는 전역 변수이어서 스크립트 파일의 어디에서나 모든 변수를 읽거나 수정할 수 있다는 사실과 모든 변수가 문자형(다른 변수 타입은 존재 하지 않음)이라는 사실을 기억 합니다. 변수를 사용하기 위해 꼭 정의(혹은 선언)할 필요는 없습니다.
다음의 예제는 변수에 문자열을 대입하는 예제 입니다.
MyVar1 = 123 MyVar2 = my string다음의 예제는 변수에 저장된 문자열을 다른 문자열과 비교 하는 예 입니다.
if MyVar2 = my string
{
MsgBox 변수 MyVar2에 "my string"이 들어 있습니다.
}
if MyVar1 >= 100
{
MsgBox 변수 MyVar1에 %MyVar1%, 이것은 숫자 100보다 큽니다.
}
위 예제에서 변수 MyVar1 이 두번째 나올때는 "%"에 쌓여있는 것을 보았을 것 입니다. 이것은 그 위치에 변수 MyVar1 의 값을 보여줄때 쓰입니다. 이런 방법으로 변수의 내용을 다른 것으로 복사하는 데 이용할 수 있습니다. 다음의 예를 봅니다.
MyVarConcatenated = %MyVar1% %MyVar2%
변수 MyVarConcatenated 에 "123 my string"이 대입 됩니다.
변수의 값을 서로 비교 할 때도 같은 방법을 사용 합니다.
if (ItemCount > ItemLimit)
{
MsgBox 변수 ItemCount에는, %ItemCount%가 들어있고, 이것은 %ItemLimit% 보다 큽니다.
}
Clipboard: Clipboard 라는 미리 정의된 변수에 항상 윈도우 클립보드의 텍스트 형식 데이터를 저장하고 있고, 이것은 다른 변수와 같은 방법으로 사용할 수 있습니다. 다음은 클립보드의 내용을 보여주는 예 입니다.
MsgBox %clipboard%
다음은 클립보드에 새로운 내용을 대입시키는 예 입니다.
clipboard = 새로운 행의 텍스트문자`r`n두번째 행의 텍스트문자`r`n
위의 예에서 'r 과 'n는 특별한 의미를 가진 문자열로 각각 케이지 리턴과 라인피드를 의미한다. 사용자가 Enter키를 누른 것 처럼 다음의 새로운 라인을 만들어 줍니다.
클립보드 (혹은 그외 변수)에 텍스트를 덧붙이려면 다음의 예를 참고 하십시오.
Clipboard = %Clipboard% 그리고 덧붙이는 텍스트가 있습니다.
Clipboard 와 변수(Variables)에 대한 세부사항을 좀 더 자세하게 알아 볼 수 있다.
연속적으로 2번이상의 무언가를 수행하기위해 반복구문(Loop)를 사용합니다. 다음은 MsgBox를 3번 실행하는 예제 입니다.
Loop 3
{
MsgBox 이 창을 3번 표시합니다.
}
반복구문(Loop) 다음에 변수를 명시할 수 있습니다. 하지만 이런 방식은 반복될 횟수가 들어있는 변수가 반복구문(Loop)안에서 결정되는 상태일때 유용합니다. 다음의 예를 봅시다.
Loop %RunCount%
{
Run C:\Check Server Status.exe
Sleep 60000 ; 60초 동안 대기.
}
위 반복구문(Loop)의 반복횟수(변수 RunCount에 숫자 대입)을 지정하지 않는 한, RunCount는 0이 되므로, 반복구문(Loop)를 생략하게 됩니다.
하나 이상의 조건으로 반복구문(Loop)를 종료할 수 있습니다. 다음의 예제는 사용자가 F1키를 누르고 있는 동안 마우스 좌클릭을 반복적으로 수행합니다.
$F1:: ; 단축키 F1 ("$" 기호는 GetKeyState의 "P" 모드 참조). Loop ; 반복횟수가 지정되지 않았기 때문에 "break"나 "return"을 만나기 전까지는 무한반복 됩니다. { if not GetKeyState("F1", "P") ; If조건문의 조건이 참(True)이면 F1키는 눌려지지 않은 상태입니다. break ; 반복구문을 종료합니다. ; 위에서 "break"가 실행되지 않았다면, 마우스를 좌클릭을 합니다. Click ; 현재 마우스 커서 위치에서 마우스 좌클릭을 합니다. } return
위의 예제는 "while...do"문 이라고 불리는 기능과 동일합니다. "while...do"문은 특정한 조건이 맞았을때(while), 수행(does)되는 것을 반복하게 되는데, 마우스 좌클릭을 반복하는 것은 F1키가 눌려있을때(while) 수행 됩니다. F1키가 눌려지지 않았을때 반복구문은 이 조건을 찾아내고 break 명령어를 통해 반복을 멈추게 됩니다. break 명령어는 반복구문의 마지막 중괄호 닫기"}"가 있는 곳까지 건너뛰기를 하고 다음 행을 수행합니다.
위의 예제는 일반적인 반복구문(Loop)의 한 형태입니다. 보다 전문적인 반복구문을 수행하려면 아래의 명령어들을 참고하십시오.
File-reading/writing loop: 한번에 한줄씩 텍스트파일을 검색합니다. 행과 행(line-by-line)방식으로 파일을 수정하는데 이용할 수 있습니다. 또한, 특정 기준을 찾는데 이용할 수 있습니다.
Files and folders loop: 한번에 하나씩 파일이나 폴더를 검색합니다. 특정 파일이나 폴더를 찾는데 이용할 수 있습니다.
Parsing loop: 한번에 하나씩, 문자열에서 특정 문자열을 검색합니다. 문자열 "Red,Green,Blue"와 같은 3개의 단어로 구성된 문자열을 특정 문자열 ","을 기준으로 3개의 문자열로 나눌수 있습니다.
Registry loop: 한번에 하나씩 특정 레지스트리 subkey를 검색합니다.
텍스트파일 마지막에 내용(예:하나의 문장을 추가합니다.)을 추가하려면, (혹은 새로 만들려면), FileAppend를 다음 보기처럼 사용 하십시오. 새로운 라인부터 시작하려면 `n (linefeed)를 사용 할 수 있습니다:
FileAppend, 하나의 문장을 추가합니다.`n, C:\My Documents\내문서.txt
파일을 덮어쓰기 하려면 명령어 FileAppend에 앞서 FileDelete를 사용해 삭제해야 합니다. 예를 들면:
FileDelete, C:\My Documents\내문서.txt
자주 쓰이는 파일과 폴더 관련 명령어들은 다음과 같습니다:
모든 명령어를 알아보려면, 명령어 목록를 보세요.