AutoHotKey (r20210301판)

문서 조회수 확인중...


파일:오토핫키로고.png
1. 개요
2. 특징
3. 장점
3.1. 난이도와 접근성
3.2. 설치의 간편함
4. 단점
4.1. 보안
4.2. 인식
4.3. 기능 제한
5. 버전
6. 여담
7. 도움말 문서
8. 커뮤니티

홈페이지

1. 개요


무료 오픈소스 기반의 스크립트 언어이다. 기본적인 프로그래밍이 가능하다.[1]

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

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


2. 특징


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

오토핫키라는 이름에 걸맞게 운영체제 단축키 지정에 특화되어 있다. 원하는 대로 키를 변경하고 .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언어에선
#include <stdio.h>
int main(void)
{
     printf("Hello world!");
     return 0;
}

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

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

또한, 처리 순서에 대해서도 비전문가가 이해하기 쉽다. 그냥 위에서 아래로 굴러가니까. C의 경우 함수를 따라 이동하지만, 오토핫키는 그런거 없다.
C에서는 수 줄에 걸쳐서 사용해야하는 랜덤 함수는, 오토핫키에선 한 줄로 간단하게 표현 가능하다.
#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전염이 되지 않는다고 말한 바 있다[2]. 즉, GPL 라이선스의 범위는 오토핫키(인터프리터)의 소스 코드(C++)와 그로 인해 나온 산출물(오토핫키 인터프리터, AutoHotkey.exe)의 경우이며, 이를 이용하여 인터프리터와 묶여 컴파일된 프로그램은 GPL C++ 컴파일러를 사용한 빌드와 마찬가지로 GPL이 아니어도 좋다는 뜻이다.

4.2. 인식


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

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


4.3. 기능 제한


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


5. 버전


  • B: 최초 개발 버전
  • L: Lexikos가 만든 새로운 버전
  • H: 유저들이 마개조시킨 버전 [4]


6. 여담


  • 국내엔 관련 서적이 없으며, 해외에는 있다. 다만, 상당히 옛날에 지어진 책이므로 설령 영어가 된다 하더라도 고수들 모두가 추천하지 않는 책. 외국 오토핫키 포럼과 국내 오토핫키 관련 사이트, 블로그에 정리가 잘 되어있기 때문에 인터넷에서 배우는 것도 좋다.

  • 많은 사람들이 매크로 제작 도구라고 알고있지만, 개발자가 공식 홈페이지에 Script Language라고 직접적으로 적어놓았으므로 스크립트 언어라고 봐야한다.

  • 인터넷 강좌를 고를 때에는 매크로를 위주로 가르치는 강좌를 피해야한다. 매크로를 만들고 싶다고 매크로부터 만드는게 아니다. 기초부터 쌓아가야지 제작기간도 짧고, 실제로 제작이 수월하다. 만약 매크로 먼저 배우기 시작한다면 끝도없이 밀려오는 오류의 바다에서 헤어나오지 못할 뿐더러, 오히려 오류를 수정하느라 제작기간도 오래걸린다. 변수나 연산자의 개념을 빨리, 마우스 클릭이나 키보드 입력 개념을 늦게 알려주는 강좌를 찾는 것도 하나의 팁. 단, 이미 다른 언어들을 다루어 보았다면 강좌를 볼 필요도 없이 공식 홈페이지 도움말을 구글 번역기 돌려보는게 더 빠르다.[5]

  • 언어와 컴파일러의 소스코드가 모두 공유되고 있다. AHK를 입맛에 맞게 수정해서 써도 된다는 뜻. 컴파일러를 수정해서 소스 보호를 위해 난독화를 진행하는 경우가 있다.

  • 언어의 특성상 타 언어에 비해 속도 면에서 떨어진다. 스크립트 언어일 뿐더러 GUI 기반 언어라서 어쩔 수 없는 부분. 만약 자기 프로그램이 속도를 극한으로 뽑아내야 하는 프로그램이라면 다른 언어를 배우는게 좋다. 참고

  • 국내에서 인식이 좋지 못하다. 상기 서술했듯이 매크로, 핵 제작 문제로 인해서 언어로 취급을 안해주는 편. 그래서 대부분의 오토핫키 개발자들은 다른 언어로 전향을 하기 마련이다. 다만, 이 경우에 또 문제가 되는 것이 '너무 숴웠던 오토핫키 문법'에 적응해버린 나머지 다른 빡빡한 언어는 배우기 힘들어진다. 실제로 AHK → C언어 순으로 배운 사람이 아예 C언어를 처음 배우는 사람보다 세미콜론, 비교 연산자 실수를 많이한다.

  • 난이도가 쉽다지만 다른 프로그래밍 언어와 다른 점이 많다보니 난해한점도 많다.
    := 익스프레션
    = 리터럴
    의 차이만 봐도 그렇고 내장된 명령과 사용자 함수의 표현 차이도 난다.[6] 그래서 v2 버전에선 하위 호환성을 버리고 이런 문제를 수정할 계획이라고 한다.

  • 동명의 상용 프로그램이 있다. 다만 프로그래밍 언어 AutoHotkey는 훨씬 먼저인 2003년에 공개되었다. 네이버에선 상용 프로그램 검색 결과의 검색순위가 높아서 정작 언어 오토핫키의 검색은 원활하게 되지 않는다. 구글을 통해 검색하는 것을 추천.

  • 스크립트 대신 간단한 GUI로 좀 더 쉽게 단축키를 설정할 수 있는 프로그램도 있다. 이름은 WindowexeReSendKey. 다만 아무래도 AutoHotkey에 비하면 커스터마이징의 범위가 좀 좁다.


7. 도움말 문서




8. 커뮤니티


  • AutoHotKey를 사용하는 사람들: 오토핫키 공식 홈페이지 최하단에 안내되어있는 커뮤니티이다. 사설 커뮤니티이지만, 공식적으로 인정된 케이스. 신규 회원가입은 되지 않는 상태이다.
  • 방개 스페이스: 신생 오토핫키 커뮤니티. 회원이 질문하면 운영자가 직접 답글을 달아준다. 운영자가 오토핫키 강의를 올리기 때문에 해당 강의에 대한 질문글도 올라오는 편. 하단의 오토핫키 연구소와 다르게, 게임 관련 글이 전혀 없는 것도 특징. 게임과 무관하게 오토핫키 언어를 공부하고 싶은 경우에 좋은 커뮤니티이다.
  • 오토핫키 연구소: 네이버 카페 형식으로, 위 두 개의 커뮤니티보다 활발한 활동을 보이는 편이다. 게임 매크로와 관련된 글이 많다. 이에 관련해서 운영자가 공지를 올렸음에도 불구하고, 여전히 대부분은 게임에서의 매크로 사용과 관련된 글을 올린다. 운영자의 접속이 뜸한지 분탕러나 광고글 정리는 느리거나 안되는 편. 자유방임주의
[1] 매크로 또한 이 언어의 개발 목적이기도 하므로, 쉽게 제작이 가능하다.[예시1] Gui, add, edit, x10 y10 w100 h20, 입력[출처] 오토핫키 공식 사이트 https://autohotkey.com[2] '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. [3] Byref 사용[4] 멀티스레드 가능[5] 사실 아래에 공식 번역된 한국어 도움말이 있다.[6] 익스프레션은 식을 집어넣는 수식이고, 리터럴은 문자를 그대로 대입하는 수식이다.