나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-03-28 21:46:53

AutoHotKey

오토핫키에서 넘어옴
파일:오토핫키 로고.svg
1. 개요2. 특징3. 장점
3.1. 난이도와 접근성3.2. 설치의 간편함
4. 단점
4.1. 보안4.2. 인식4.3. 기능 제한
5. 버전6. 여담7. 입문하기
7.1. 키 값 알기7.2. 간단하게 매크로 만들어보는 법7.3. 도움말 문서7.4. 커뮤니티7.5. 강좌

[clearfix]

1. 개요

홈페이지에서 바로 다운로드 가능.
무료 오픈 소스 기반의 스크립트 언어이다. 기본적인 프로그래밍이 가능하다.[1]

이 프로그램은 2003년 경에 처음 공개되었는데, 사실 이보다 이전인 1999년경에 나온 AutoIt을 만들던 제작자 그룹 중 한 명이 AutoIt V2에서 V3로 넘어가는 시점에서 컨셉에 대한 견해차이로 따로 독자적으로 만들어 AutoIt 커뮤니티에 공개하면서 나온 물건이다. AutoIt V2를 기반으로 했기 때문에 그 문법을 그대로 차용하고 있다. 반면, 현재의 AutoIt V3는 아예 다른 문법을 가지고 있다.

처음에는 AutoIt, AHK 모두 GPL 라이센스하에 소스를 공개했으나, AutoIt 측은 "경쟁자가 지속적으로 우리의 소스를 베끼고 있다" 면서 소스 비공개로 바뀌었다.

2. 특징

모든 매개변수 사이엔 쉼표가 들어간다.[2]

오토핫키라는 이름에 걸맞게 운영체제 단축키 지정에 특화되어 있다. 원하는 대로 키를 변경하고 .exe 파일로 만들면, 해당 바이너리가 백그라운드 프로세스로 올라간 후 실행이 된다. 이 프로그램의 개발 목적 중 하나도 매크로이다.[출처]

쉽게 만든다고 만든 AutoIt 만 해도 BASIC 언어의 형태를 그대로 가지고 있었기 때문에 비프로그래머들에게는 배우기 매우 어려웠던 반면, AHK 는 직관적이고 꼭 필요한 기능만 담아 논리적인 센스만 조금 있다면 누구나 쉽게 접근할 수 있다. 물론 그 반대급부로 복잡한 매크로 작업을 작성하기엔 기능이 부족하거나 코드가 복잡하게 되고 가독성도 떨어지게 된다. 물론 이건 프로그래머들의 이야기이고, 간단히 마우스 클릭 반복작업이나 하고자 하는 일반적인 유저라면 비주얼 베이직보다 쉬운 AHK 는 유용한 툴이 된다.

한 때 이걸로 온라인 게임의 오토 프로그램을 만드는 사람도 있었지만 지금은 게임가드 등에 막혀서 작동이 안된다. 물론 게임가드가 없는 외산 프로그램, 예를 들자면 디아블로 3 같은 데에선 무기들을 간편하게 교환하는데 매우 애용되고 있다.

AHK 를 EXE 등의 실행파일로 컴파일하는 옵션도 있는데 바이러스로 판정되는 경우가 많다.
stdout := FileOpen("*", "w `n")
stdout.Write(msg)
stdout.Read(0)
sleep 5000

또는
FileAppend,Test Message`n,*

으로 구문을 저장하고
For /F "tokens=*" %L in ('""%ProgramFiles%\AutoHotkey\AutoHotkey.exe" "My Script .ahk""') do @Echo %L

형식으로 실행하면 DOS창에 출력이 가능은 하다.

3. 장점

3.1. 난이도와 접근성

쉽다. 대부분의 명령은 영어만 할 줄 안다면 바로 이게 무슨 역할을 하는지 알아볼수 있다. C언어에선
#!syntax cpp
#include <stdio.h>
int main(void)
{
     printf("Hello world!");
     return 0;
}

처럼 코딩을 할 수 있다면, 오토핫키에선
Msgbox, Hello world!

라고 코딩할 수 있다. 비전문가가 볼때 훨씬 간결하고 Msgbox를 "메시지 박스"라고 직관적으로 알아듣는다.

또한, 처리 순서에 대해서도 비전문가가 이해하기 쉽다. 그냥 위에서 아래로 굴러가니까. C언어의 경우 함수를 따라 이동하지만, 오토핫키는 그런거 없다.
C에서는 수 줄에 걸쳐서 사용해야하는 랜덤 함수는, 오토핫키에선 한 줄로 간단하게 표현 가능하다.
#!syntax cpp
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
     srand((unsigned int)time(NULL));
     int var = rand()%100+1; //(1부터 100사이의 난수를 생성하여 var에 저장한다)
     return 0;
}


Random, var, 1, 100 ;(1부터 100사이의 난수를 생성하여 var에 저장한다)

3.2. 설치의 간편함

오토핫키의 설치는 무려 10초 이내. 용량은 2MB즈음이며, 부담없이 빠르게 PC에 설치해서 쓸 수 있다.

4. 단점

4.1. 보안

모든 프로그래밍 언어가 비슷하지만, 오토핫키는 특히 심하다. L버전 오토핫키를 쓴다면 exe파일에 열기(O)→메모장을 선택시 하단부에 소스가 적나라하게 보인다. 이외의 버전에서는 디컴파일러 혹은 올리디버거를 이용해 누구나 쉽고 빠르게 뚫을 수 있다. 그러나, 이를 막는 패킹 및 난독화라는 작업이 활성화 되고, 오핫도 슬슬 안전지대에 들어가는 듯 했으나.. 그런거 없다. 이마저도 리버싱 고수에게는 통하지 않다. 다만 오토핫키는 GPL 라이센스 하에 배포되고 있으므로, AHK2EXE를 이용해 컴파일된 오토핫키 스크립트는 (컴파일 과정에서 오토핫키 소스코드가 통합되므로) 자동적으로 GPL 오픈소스 라이센스가 전염되어 오픈소스로 공개를 해야 한다는 주장이 있다.

그렇지만 GPL 라이선스의 제품이 직접 포함되지 않은 산출물은 GPL이 아니어도 된다! 실제로, GPL 라이선스 컴파일러인 GCC로 산출된 프로그램은 GPL과 별개이다. 오토핫키에서의 바이너리화가 된다면 하나의 실행 파일에 묶이게 되며, 이는 라이브러리와 같은 형태가 아니므로(그리고 분리불가능한 상태이므로) 산출된 프로그램에는 GPL이 적용되지 않는다. 또한, 스크립트 언어에서의 컴파일은 인터프리터와 스크립트가 하나의 exe로 묶이는 개념으로 설명되곤 하는데, 이 경우 또한 자유 소프트웨어 재단의 FAQ에서 GPL 전염이 일어나지 않는다고 밝혔다. 한국어 번역

또한, 오토핫키(1.0)의 제작자 Chris Mallett도 컴파일된 exe(산출물)은 GPL전염이 되지 않는다고 말한 바 있다[4]. 즉, GPL 라이선스의 범위는 오토핫키(인터프리터)의 소스 코드(C++)와 그로 인해 나온 산출물(오토핫키 인터프리터, AutoHotkey.exe)의 경우이며, 이를 이용하여 인터프리터와 묶여 컴파일된 프로그램은 GPL C++ 컴파일러를 사용한 빌드와 마찬가지로 GPL이 아니어도 좋다는 뜻이다.

4.2. 인식

문법의 난이도가 매우 낮아 누구나 쉽게 코딩이 가능하고 일부 몰상식한 사용자들에 의해 제작된 게임 핵 형태의 매크로가 돌아다니는 것을 쉽게 목격할 수 있기 때문에 툴키디들의 전유물이라는 인식이 꽤 퍼져있는 편이다.

한편 상술한 사용처의 문제 때문에 일부 백신에선 오토핫키를 바이러스로써 잡아내기도 한다. 행위 기반으로 잡히는 경우가 90%인데, 어베스트맥아피같은 유명한 백신들에게도 가끔가다 걸리니 주의요망. 바이러스 토탈에 검사를 해보면 멀쩡한 오토핫키 파일이라도 적게는 두세개부터 많게는 10개이상의 백신이 감지하는 모습을 볼 수 있다.

4.3. 기능 제한

문법을 더 쉽고, 더 쉽고, 또 더 쉽게 만드는 바람에 자유도가 낮다. 라이트하게 코딩하는 오토핫키 유저에겐 상관 없지만, 오리지널 B버전은 global 명령도 없으며[5] 약간 개선된 L버전도 Python같은 다른 스크립트 언어에 비해선 확실히 떨어진다.

5. 버전

6. 여담

7. 입문하기

7.1. 키 값 알기

영어로 된 공식 사이트나, 일부 번역된 한국어 사이트을 쭉 훑어본다.

한국인이 자주 쓰는 특수 키
스크립트 입력 대응 키
^ Ctrl
! Alt
# Win
+ Shift
SC1F1 한자키
SC1F2 한영키

오토핫키 스크립트 만들어 찾아내는 방법도 있다.

7.2. 간단하게 매크로 만들어보는 법


1. 오토핫키 활용법 1번부터 9번까지 따라해본다.
2. 프날 블로그의 20강, 21강, 22강, 18강, 25강, 15강, 16강을 순서대로 본다.
3. 오토핫키 활용법 10번부터 마지막까지 따라해본다.
4. Gosub에 대해서 알아본다.[7][8]
5. 이제 자신의 상황에 맞게 만들어본다. 만약 위의 지식만으로 모자라면 구글에 검색해본다. 단순 반복적인 업무할 때 요긴하게 써보자.

7.3. 도움말 문서

7.4. 커뮤니티

7.5. 강좌


[1] 매크로 또한 이 언어의 개발 목적이기도 하므로, 쉽게 제작이 가능하다.[2] 예시: Gui, add, edit, x10 y10 w100 h20, 입력[출처] 오토핫키 공식 사이트 https://autohotkey.com[4] 'AutoHotkey를 이용한 결과물에 GPL전염이 됩니까?'에 대한 Chris의 답변 원문: No, because the EXE doesn't contain AutoHotkey's source code. Therefore, when you distribute a compiled script, you're not distributing any GPL source, and thus your application isn't subject to the GPL unless you want it to be. In other words, when you build an app with AutoHotkey, there are no restrictions on selling it, nor do you have to release your script's source code. This is because it is similar in principle to having built the app with a GPL C++ compiler.[5] Byref 사용[6] 익스프레션은 식을 집어넣는 수식이고, 리터럴은 문자를 그대로 대입하는 수식이다.[7] 보통 Goto보다는 Gosub을 많이 쓴다. 그리고 'a:'대신 '가나다:'같이 할 수도 있다.[8] Gosub에 너무 의존하면 안좋지만 초보자 입장에서 이해하기 쉽고 유용해서 일단 알아두면 좋다.#,#