{{위키데이터 속성 추적}}
{{프로그래밍 언어 정보
|이름 = 오토잇(Autoit)
<!--|로고 = [[파일:Autoitlogo.png|오토잇 로고]]-->
|그림 = AutoIT example script.png
| released = {{시작 날짜와 나이|1999|01}}
|설계자 = 
|개발자 = Jonathan Bennett <br />  & AutoIt Team
| latest_release_version = 3.3.16.1
| latest_release_date = {{시작 날짜와 나이|2022|09|19}}<ref>{{웹 인용|title=AutoIt Downloads |url=https://www.autoitscript.com/site/autoit/downloads/ |access-date=2022-11-07 |publisher=AutoIt}}</ref>
| latest_preview_version = 3.3.16.1 [[출시 후보|RC]]
| latest_preview_date = {{시작 날짜와 나이|2022|06|02}}<ref>{{웹 인용|url=https://www.autoitscript.com/forum/topic/208263-autoit-33161-release-candidate/| title=AutoIt 3.3.16.1 Release Candidate| publisher=AutoIt| access-date=2022-06-08}}</ref>
|영향을 받은 언어 = [[오토핫키]]
|영향을 준 언어 = [[베이직]]
|운영 체제 = [[마이크로소프트 윈도우]] ([[Win32]])
|라이선스 = [[프리웨어]]
|웹사이트 = http://www.autoitscript.com/
}}

'''오토잇'''({{lang|en|Autoit}})은 [[마이크로소프트 윈도우]]를 위한 [[프리웨어]] [[자동화]] [[언어]]이다. 초기 버전은 주로 마이크로소프트 윈도우의 프로그램을 위한 자동화된 스크립트를 만드는 데에 사용되었다. 그러나 지금은 전반적인 디자인과 기능 모두에서 향상된 기능을 포함하는 프로그래밍 언어로 발달하였다.

최근에 출시된 버전 3은 문법이 더 [[베이직]]에 가깝게 되었고, 3 세대 프로그래밍 언어와 '''Variant'''라고 불리는 자료형<ref>사용되는 의도에 따라서 자동 변환이 되어 개발자가 편하게 사용할 수 있음. 문자열, 정수, 실수, 구조체, 포인터, 핸들, 배열등</ref>을 포함한다. 지원되는 운영 체제는 윈도 [[윈도우 95|95]], [[윈도우 98|98]], [[윈도우 미|ME]], [[윈도우 NT|NT4]], [[윈도우 2000|2000]], [[윈도우 XP|XP]], [[윈도우 2003|2003]], [[윈도우 비스타|비스타]], [[윈도 2008|2008]] 이 있다. (그러나 3.3.0.0 버전 이후는 [[윈도우 9x]] 지원 부분이 제거되었다.)

오토잇 스크립트는 [[바이트 코드]](a3x) 혹은 실행 파일(실행 가능한 bin 파일에 a3x 파일을 추가함.)로 변환이 가능하다. 실행 파일은 오토잇 [[인터프리터]]가 설치되어있지 않은 컴퓨터에서도 잘 작동한다. 다양한 [[함수]] [[라이브러리]]([[사용자 정의 함수|UDF]], "사용자 정의 함수"로 알려져 있다.)<ref>{{언어링크|en}} [http://www.autoitscript.com/autoit3/udfs/UDF_Standards.htm UDF 표준문서]]</ref>는 표준으로 포함되어 있거나 웹사이트에서 추가할 수 있다. 오토잇은 사실상 [[통합 개발 환경|IDE]]인 [[SciTE]] 편집기와 함께 배포된다. 변환기 및 도움말 텍스트를 완벽하게 배포판에 포함되어 오토잇 개발자에 대한 사실상의 표준 환경을 제공한다.

== 기능 ==
* 배우기 쉬운 [[BASIC]] 류의 문법
* 일반적인 고급 언어 수준의 함수, 반복분, 표현식 분석
* 키눌림과 마우스 움직임 흉내내기
* [[창]]과 [[프로세스]] 조절
* 모든 표준 윈도 컨트롤을 제어 가능
* [[스크립트 언어|스크립트]]를 단독 [[PE 포맷|실행파일]]로 [[변환]] 가능 (AutoitSC.bin에 a3x를 추가하는 방식)
* [[GUI|그래픽 사용자 인터페이스(GUI)]] 생성
* [[컴포넌트 오브젝트 모델|컴포넌트 오브젝트 모델(COM)]] 지원
* [[정규 표현식]] 지원 ([[펄 호환 정규 표현식]], [http://www.pcre.org PCRE] 라이브러리 사용)
* [[DLL|외부 DLL]]과 [[윈도우 API]] 함수 직접 호출, 구조체 지원
* 조절가능한 RunAs 함수
* 상세한 도움말 파일(개인에 의해 일부 한글화 된)과 지원 포럼에 기반한 방대한 영문 커뮤니티
* 윈도 [[윈도우 95|95]] / [[윈도우 98|98]] / [[윈도우 미|ME]] / [[윈도우 NT|NT4]] / [[윈도우 2000|2000]] / [[윈도우 XP|XP]] / [[윈도우 2003|2003]] / [[윈도우 비스타|Vista]] / [[윈도 2008|2008]] / [[윈도우 7|7]] / [[윈도우 8|8]]과 호환
* [[유니코드]]와 [[x64]] 지원
* 심리적 안정을 위해 [[디지털 서명]]됨 (Autoit3.exe에 한하여)
* [[윈도우 비스타]]의 [[사용자 계정 컨트롤|사용자 계정 제어(UAC)]]와 작동가능
* 다른 [[프로그래밍 언어]]에서 사용 가능한 '''AutoitX3''' (WinAPI 호출 [[DLL]]과 [[컴포넌트 오브젝트 모델|COM]] 호출 방식, [[유니코드]]와 [[x64]] 지원)
* 라이브러리를 통한 [[객체 지향 설계]]를 지원 ([https://web.archive.org/web/20100226105014/http://autoitobject.origo.ethz.ch/ autoitobject] UDF/DLL 필요)

== 사용 ==
오토잇은 윈도나 자동화 작업(웹사이트나 네트워크 모니터링, 디스크 최적화나 백업등)에 필요한 유틸리티를 만들 수 있다. 또한 응용 프로그램을 제어나 테스트하는 데에 오토잇 스크립트를 사용할 수 있지만 온라인 게임에서 [[봇]]을 돌리거나 [[악성코드]]를 만드는 데에 사용될 수도 있다. [[대한민국]] IT 산업에서는 주로 [[소프트웨어 테스트]], 휴대용 프로그램으로의 리팩 등에 사용하고 있다.

== 역사 ==
* 1998년 크리스마스 - 키 전송을 위한 C 프로그램의 아이디어
* 1999년 1월 - 오토잇 1.0 출시
* 1999년 8월 - 오토잇v2 와 오토잇X 출시
* 1999년 9월 - 오토잇에 변환기 포함됨.
* 2002년 12월 - 오토잇v3 (공개 베타 버전) 출시
* 2004년 2월 - 오토잇v3 (안정된 버전) 출시
* 2006년 9월 - Auto3Lib 개발 시작
* 2007년 11월 - 오토잇 v3.2.10.0 출시, Auto3Lib이 AutoIt v3에 포함됨.
* 2008년 5월 - 오토잇 v3.2.12.0 출시, 통합된 GUI 기능 추가
* 2010년 1월 - 오토잇과 오토잇X v3.3.4.0 출시

== 커뮤니티 ==
오토잇 커뮤니티는 [[2009년]] [[6월 27일]] 오후 8시 50분 을 기준으로 30,915명의 사용자와 660,898개의 글이 있고, 최대 동시 접속자수는 한국 시간으로 [[2007년]] [[7월 13일]] 오전 5시 2분에 4,882명이다.<ref>{{언어링크|en}} [http://www.autoitscript.com/forum/ 오토잇 포럼의 통계, 맨 아래 참고]</ref>

== 문법 ==
=== 연산자 ===
{|
|-valign="top"
|
{| class="wikitable"
|-
! 산술 연산자
! 설명
|-
|align="center"|+
| 더하기
|-
|align="center"|-
| 빼기
|-
|align="center"|*
| 곱하기
|-
|align="center"|/
| 나누기
|-
|align="center"|&
| 문자열 결합
|-
|align="center"|^
| 제곱
|}
|
{| class="wikitable"
|-
! 관계 연산자
! 설명
|-
|align="center"|=
| 같음
|-
|align="center"|==
| 같음 (대소문자 구분)
|-
|align="center"|<nowiki><></nowiki>
| 같지 않음
|-
|align="center"|>
| 크다
|-
|align="center"|>=
| 크거나 같다
|-
|align="center"|<
| 작다
|-
|align="center"|<=
| 작거나 같다
|}
|
{| class="wikitable"
|-
! 논리 연산자
! 설명
|-
|-
|align="center"|AND
| 이고
|-
|align="center"|OR
| 또는
|-
|align="center"|NOT
| 아님
|}
|}

=== 연산자 우선순위 ===
{| class="wikitable"
|-
! 가장 높음
|-
| NOT
|-
| ^
|-
| * /
|-
| + -
|-
| &
|-
| < > <= >= = <> ==
|-
| AND OR
|-
! 가장 낮음
|}

== [[헬로 월드 프로그램]] ==
<syntaxhighlight lang="autoit">
ConsoleWrite("Hello World!" & @CRLF)
; ConsoleWrite는 함수이고 단 하나의 인자만 받아서 쓴 바이트 개수만큼 반환한다.
; &는 문자열 결합이며 이 연산자를 사용하면 어떤 변수라도 문자열로 변환된뒤 결합된다.
; @CRLF는 타 프로그래밍 언어에서 \r\n을 의미한다. (캐러지 리턴과 라인 피드)
; ;는 주석 표시에 사용된다.
</syntaxhighlight>

위의 오토잇 스크립트 소스는 표준 출력에 "'''Hello World'''"를 출력한다.

그러나, 일반적으로 오토잇은 [[콘솔]]에 최적화되어 있지 않고 주로 [[GUI]]을 이용하기 때문에 대부분은 [[헬로 월드 프로그램]]으로 [[메시지 상자]]를 이용한다.

<syntaxhighlight lang="autoit">
MsgBox(64, Default, "Hello World!")
; MsgBox는 메시지 상자를 띄우는 함수이고 사용자가 선택한 버튼에 따라서 반환되는 값이 달라진다.
; 첫 번째 인자로 넘긴 64는 MsgBox 함수에서 메시지 상자에 정보 아이콘을 추가할 때 사용된다.
; (몇몇 함수는 한 인자를 flag로 받아서 필요한 옵션을 추가하려면 해당 값만 추가하면 된다.)
; Default는 사용되는 부분에 따라서 다르게 이용된다, 기본적으로 기본값이다.
; (MsgBox 함수는 두 번째 인자가 Default 이면 스크립트의 이름(@ScriptName)을 출력한다.)
; 문자열은 "나 '로 감쌀 수 있다.
</syntaxhighlight>

이 오토잇 스크립트 소스는 정보 아이콘을 포함한 메시지 상자를 출력한다.

== 가능한 내용 ==
* 오토잇에는 아직 배타단계인 PluginOpen, PluginClose 함수가 있다.<ref>{{언어링크|en}} [http://www.autoitscript.com/autoit3/files/beta/autoit/undocumented/PluginOpen.htm PluginOpen 함수 레퍼런스] {{웨이백|url=http://www.autoitscript.com/autoit3/files/beta/autoit/undocumented/PluginOpen.htm |date=20100307141749 }}</ref> 이 함수의 주 목적은 오토잇 플러그인용으로 개발된 DLL을 마치 오토잇 함수처럼 이용하기 위해서이다.<ref>{{언어링크|en}} [http://www.autoitscript.com/forum/index.php?showtopic=15279 오토잇 플러그인이 곧 등장합니다.]</ref>
* [[윈도API|WinAPI]]를 이용하여 오토잇 스크립트에 어셈블리 코드를 포함하는 것이 가능하다.<ref>{{언어링크|en}} [http://www.autoitscript.com/forum/index.php?showtopic=84501 오토잇에서 어셈블리를 지원합니다.]</ref>

== 한계 ==
* [[네임스페이스]], [[멀티스레딩]]을 지원하지 않는다.
* [[기계어]]로 [[컴파일]] 할 수 없다. (현재 오토잇에서는 바이트 코드(a3x)로의 변환만 지원한다.)
* 코드 한 줄에 4095 문자를 초과하여 입력할 수 없다.
* [[환경 변수]]에는 32767 문자를 초과하여 입력할 수 없다.
* [[함수]]는 재귀 호출을 최대 5,100번까지만 할 수 있다.
* [[배열]]은 최대 64 차원, 원소는 2^24 (16,777,216)개를 넘어갈 수 없다.
* 얻을 수 있는 최대 창 제목과 텍스트는 65535 문자이며, 창 제목 얻어오기는 [[윈도우 95]]이하에서는 불가능하다.
* [[GUI]] 폼에 포함될 수 있는 최대의 [[컨트롤]]의 수는 65,532개이다.
* COM 객체의 최대 가능한 [[이벤트]] 수는 64개이다.
* 커멘드라인에서 받을 수 있는 최대의 [[매개변수]]는 4,096 문자, 64 단위(+ 단위 개수)이다. ($CmdLineRaw 문자열 변수와 $CmdLine 배열)
* 트레이 메뉴의 최대 [[아이템]] 수는 505개이다.
* 트레이 메뉴의 최대 [[이벤트]] 수는 32개이다.
* 트레이 툴팁의 최대 [[문자]]의 수는 64개이다.
* [[문자열]], [[바이너리|이진값]]은 2^31 (2,147,483,647) [[바이트]] 이상 [[변수 (컴퓨터 과학)|변수]]에 저장될 수 없다.
* [[변수 (컴퓨터 과학)|변수]]의 [[포인터 (프로그래밍)|포인터]]를 직접 얻을 수 없다. ([[구조체]]나 CallBack [[함수]]에 한해서 포인터를 얻을 수 있다.)

== 알려진 문제 ==
{{출처 필요 문단|날짜=2009-6-25}}
현재 오토잇에서 알려진 문제는 다음과 같다.

* 유니코드 버전에서 바이너리와 문자열 변환이 ASCII 인코딩에서 정상적으로 변환되지 않는 문제가 있다. (해당 부분은 자체 함수만을 사용하여 해결하거나 윈도 API를 여러번 사용하여 해결이 가능하다, 원인은 바이너리와 문자열 길이를 같게 보기 때문이다.)
* 마찬가지로 아스키 버전에서는 멀티바이트 문자 처리에 약간 문제가 있다. (글자 "테스트"를 StringLen 함수를 이용해서 문자열 길이를 얻으면 6을 반환한다.)
* DLL 관련 함수에서 때때로 스크립트가 강제 종료되는 경우가 있다.
* 멀티스레딩이 지원되지 않고, 강제로 지원하려고 하면 반복문이나 Sleep 함수에서 문제가 발생한다.
* #include에서 자기 자신이나 서로를 포함하는 경우, #include-once가 붙지 않으면서 함수를 포함한 소스 코드를 두 번 이상 포함한 경우, FileInstall 함수에서 첫 번째 인자로 넘긴 소스 파일의 위치가 예측 불가능하거나 존재하지 않는 경우에는 변환되지 않는다.
* Obfuscator가 완전히 소스 코드의 [[가독성]]을 떨어트릴 수 없고, 일부 코드에서는 오히려 에러를 발생한다. (에러가 발생하게 만드는 함수는 AdlibEnable, Call, Eval, GuiRegisterMsg, GuiSetOnEvent, GuiCtrlSetOnevent, HotKeySet, IsDeclared, TrayItemSetOnEvent, ObjEvent, Opt 설정의 "OnExitFunc" 가 있다.)
* 배열의 비교가 불가능하다. (아래 예제 참고, 예제와 같이 배열의 원소가 같던 다르던 간에 상관없이 배열의 비교를 시도하면 같은 값을 반환한다.)
<syntaxhighlight lang="autoit">
Dim $Aa[3] = [1, 2, 3], $Ab = $Aa, $Ba[3] = [4, 5, 6]
Dim $sFormat = "%8s | %-8s| %-8s| %-8s\n"

ConsoleWrite("(Aa, Ab, Ba) 배열을 비교합니다." & @CRLF)
ConsoleWrite(StringFormat($sFormat, "Compare", _
	"=", "==", "<>"))
ConsoleWrite(StringFormat($sFormat, "Aa, Ab", _
	($Aa = $Ab), ($Aa == $Ab), ($Aa <> $Ab)))
ConsoleWrite(StringFormat($sFormat, "Aa, Ba", _
	($Aa = $Ba), ($Aa == $Ba), ($Aa <> $Ba)))

#cs 실행 결과 나온 출력
(Aa, Ab, Ba) 배열을 비교합니다.
 Compare | =       | ==      | <>
   Aa,Ab | False   | True    | True
   Aa,Ba | False   | True    | True
#ce
</syntaxhighlight>

== 같이 보기 ==
* [[Automator]] ([[OS X]] 전용)
* [[비주얼 베이직]]
* [[오토핫키]]
* [[iMacros]]
* [[thinBasic]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{언어링크|en}} [http://www.autoitscript.com/ 공식 홈페이지]
* {{언어링크|en}} [http://www.autoitscript.com/forum 오토잇 커뮤니티] / {{언어링크|ko}} [http://cafe.naver.com/autoitscript 오토잇 커뮤니티]
* {{언어링크|en}} [http://www.autoitscript.com/autoit3/docs/ 오토잇 도움말]
* {{언어링크|ko}} [http://jgh0721.tistory.com/category/프로그래밍/AutoIt3X 한국어 오토잇 도움말 번역본 배포처] {{웨이백|url=http://jgh0721.tistory.com/category/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/AutoIt3X |date=20160304104351 }}, [https://nova386.blog.me/221010766537 오토잇 도움말 한글(뱊] {{웨이백|url=https://nova386.blog.me/221010766537 |date=20200711125500 }} , )

[[분류:스크립트 언어]]
[[분류:베이직 프로그래밍 언어 계열]]
[[분류:자동화 소프트웨어]]