오토잇
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
오토잇은 1998년 크리스마스에 키 전송을 위한 C 언어 프로그램 아이디어에서 시작되어, 1999년 1.0 버전 출시 이후 지속적으로 업데이트된 윈도우 자동화 스크립트 언어이다. 오토잇 v2를 거쳐 2002년 v3의 공개 베타 버전이 출시되었으며, GUI 함수 기능 추가 등 여러 기능이 개선되었다. 초기에는 GPL 라이선스로 소스 코드가 공개되었으나, 이후 폐쇄되었다. 오토잇은 BASIC과 유사한 문법을 사용하며, 키보드 및 마우스 조작, 창 및 프로세스 제어, GUI 생성 등 다양한 기능을 제공한다. 또한 AutoItX를 통해 다른 프로그래밍 언어에서도 사용할 수 있으며, 윈도우 시스템 관리, 유틸리티 제작, 저비용 실험실 자동화 등 다양한 분야에 활용된다. 하지만 네임스페이스 및 멀티스레딩을 지원하지 않는 등의 한계와 알려진 문제점들이 존재한다.
더 읽어볼만한 페이지
- 자동화 소프트웨어 - 매크로 바이러스
매크로 바이러스는 응용 프로그램의 매크로 기능을 악용하여 자동 실행 및 복제를 통해 시스템을 감염시키는 악성 코드로, 출처 불분명한 파일에 대한 주의 및 백신 소프트웨어 활용을 통해 예방이 필요하며, 최신 Microsoft Office에서는 관련 보호 기능을 제공한다. - 자동화 소프트웨어 - Expect
Expect는 텔넷, FTP, SSH와 같은 대화형 응용 프로그램 제어 자동화 도구로, 의사 터미널이나 콘솔 에뮬레이션을 통해 대상 프로그램을 제어하며 autoexpect 도구로 스크립트 작성을 자동화할 수 있고, 비밀번호 처리 시 보안에 유의해야 한다. - 베이직 프로그래밍 언어 계열 - VB스크립트
VB스크립트는 마이크로소프트에서 개발한 스크립트 언어로, 인터넷 익스플로러의 클라이언트 스크립트 언어 및 액티브 서버 페이지의 표준 언어로 사용되었으나, 윈도우 클라이언트 지원 중단 발표로 향후 윈도우 릴리스에서 제거될 예정이다. - 베이직 프로그래밍 언어 계열 - 비주얼 베이직
비주얼 베이직은 1991년 마이크로소프트에서 출시된 GUI 기반 응용 프로그램 개발에 강점을 가진 프로그래밍 언어이며, 윈도우용 응용 프로그램 및 데이터베이스 조작 프로그램 개발에 주로 사용되었고, 2005년 표준 지원이 중단되었다. - 스크립트 언어 - Tcl
Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다. - 스크립트 언어 - PHP
PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
| 오토잇 - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 기본 정보 | |
![]() | |
| 개발자 | AutoIt Consulting Ltd. |
| 설계자 | Jonathan Bennett |
| 출시일 | 1999년 1월 |
| 최신 버전 | 3.3.16.1 |
| 최신 버전 출시일 | 2022년 9월 19일 |
| 미리보기 버전 | 3.3.16.1 릴리스 후보 2 |
| 미리보기 버전 출시일 | 2022년 6월 9일 |
| 영향을 받은 언어 | BASIC |
| 프로그래밍 언어 | 명령형 프로그래밍 함수형 프로그래밍 절차적 프로그래밍 반사적 프로그래밍 |
| 플랫폼 | IA-32 x64 |
| 운영 체제 | Windows XP SP3 이상 Windows Server 2003 이상 |
| 라이선스 | 프리웨어 |
| 파일 확장자 | .au3 |
| 웹사이트 | AutoIt 공식 웹사이트 |
| 기타 | |
2. 역사
오토잇은 1998년 크리스마스에 C 언어를 이용한 키스트로크 전송 자동화 프로그램 아이디어에서 시작되었다. 1999년 1월 첫 버전인 오토잇 1.0이 출시되었고, 같은 해 8월에는 오토잇 v2와 AutoItX가, 9월에는 컴파일러가 포함된 버전이 나왔다. 초기 버전(v1, v2)은 VBScript나 BASIC과 유사한 문법을 가진 폐쇄형 소스 프로젝트였다.
2002년 12월에는 문법적으로 큰 변화를 가진 오토잇 v3의 공개 베타 버전이 출시되었고, 2004년 2월 안정 버전이 공개되었다. 오토잇 v3는 초기에는 GNU 일반 공중 사용 허가서(GPL)에 따라 자유 오픈 소스 소프트웨어로 공개되었으나, 버전 3.1.0 (2005년 2월)부터는 폐쇄형 소스로 전환되었다. 개발팀은 다른 프로젝트가 소스 코드를 가져가 오토잇에 적대적인 행동을 반복했기 때문에 소스 코드 공개를 중단했다고 설명한다[18]. 오토잇 v3는 GUI 스크립트 지원(v3.1.0), Auto3Lib 통합(v3.2.10.0, 2007년 11월), 통합 GUI 기능 추가(v3.2.12.0, 2008년 5월) 등 지속적인 기능 개선을 거쳐왔다.
2. 1. 초기 버전 (1999년)
1998년 크리스마스에 C 언어를 사용하여 키스트로크 전송을 자동화하는 프로그램 아이디어가 처음 제안되었다. 이를 바탕으로 1999년 1월, 오토잇(AutoIt)의 첫 번째 버전인 1.0이 출시되었다. 같은 해 8월에는 오토잇 v2와 함께 COM 구성 요소인 AutoItX가 공개되었다. 이어 9월에는 작성된 스크립트를 독립적인 실행 파일로 만들 수 있는 컴파일러가 오토잇에 포함되었다.오토잇 1과 2는 소스 코드가 공개되지 않은 폐쇄형 소스 프로젝트였으며, 문법은 VBScript나 BASIC과 유사한 형태를 가졌다.
2. 2. 오토잇 v3 (2002년 ~ 현재)
오토잇 v1과 v2는 폐쇄형 소스 프로젝트였으며, 문법이 VBScript 및 BASIC과 더 유사한 오토잇 v3와는 매우 달랐다.오토잇 v3는 2002년 12월 공개 베타 버전으로 출시되었고, 2004년 2월 안정 버전이 나왔다. 초기에는 자유 오픈 소스 소프트웨어로서 GNU 일반 공중 사용 허가서(GPL) 라이선스를 따랐으나, 버전 3.1.0 (2005년 2월)부터는 폐쇄형 소스로 전환되었다. 개발팀은 다른 프로젝트가 소스 코드를 가져가 AutoIt에 적대적인 행동을 반복했기 때문에 소스 코드 공개를 중단했다고 설명한다[18]. 버전 3.1.0은 또한 GUI 스크립트를 지원하는 최초의 릴리스이기도 했다.
2006년 9월에는 별도의 라이브러리였던 Auto3Lib의 개발이 시작되었고, 2007년 11월에 출시된 오토잇 v3.2.10.0 버전부터 Auto3Lib이 통합되었다. 2008년 5월에는 오토잇 v3.2.12.0 버전이 출시되면서 통합된 GUI 기능이 추가되었다.
이후 오토잇 v3는 지속적으로 업데이트되고 있으며, 주요 버전 업데이트 내역은 다음과 같다.
| 출시 연도 | 출시 월 | 버전 정보 |
|---|---|---|
| 2008년 | 12월 | 오토잇(및 AutoItX) v3.3.0.0 출시 |
| 2009년 | 12월 | 오토잇 v3.3.2.0 출시 |
| 2010년 | 1월 | 오토잇 v3.3.4.0 출시 |
| 2010년 | 3월 | 오토잇 v3.3.6.0 출시 |
| 2010년 | 4월 | 오토잇 v3.3.6.1 출시 |
| 2011년 | 12월 | 오토잇 v3.3.8.0 출시 |
| 2012년 | 1월 | 오토잇 v3.3.8.1 출시 |
| 2013년 | 12월 | 오토잇 v3.3.10.0 출시 |
| 2014년 | 6월 | 오토잇 v3.3.12.0 출시 |
| 2015년 | 7월 | 오토잇 v3.3.14.0 및 v3.3.14.1 출시 |
| 2015년 | 9월 | 오토잇 v3.3.14.2 출시 |
| 2018년 | 2월 | 오토잇 v3.3.14.3 출시 |
| 2018년 | 3월 | 오토잇 v3.3.14.5 출시 |
| 2022년 | 3월 | 오토잇 v3.3.16.0 출시 |
| 2022년 | 9월 | 오토잇 v3.3.16.1 출시 |
2. 3. 오픈 소스 정책 변화
오토잇은 초기에 GPL 라이선스에 따라 소스 코드를 공개했으나, 현재는 공개가 중단된 상태이다. 개발팀은 이러한 결정의 배경으로 다른 프로젝트들이 반복적으로 오토잇의 소스 코드를 무단으로 사용하고, 심지어 오토잇 프로젝트에 대해 적대적인 행동을 보인 사례들이 있었기 때문이라고 설명한다[18].3. 주요 기능
오토잇(AutoIt)은 윈도우 환경을 위한 프리웨어 자동화 스크립트 언어이다. BASIC과 유사한 쉬운 문법을 기반으로 하며, 다양한 작업을 자동화하고 사용자 정의 GUI를 생성하는 데 사용된다.
주요 기능은 다음과 같은 영역으로 나눌 수 있다.
- 사용자 작업 자동화: 키보드 입력 및 마우스 움직임을 시뮬레이션하고, 창과 프로세스를 제어하며, 윈도우 컨트롤과 상호작용하는 기능을 제공한다.
- 스크립트 작성 및 배포: 배우기 쉬운 문법으로 스크립트를 작성하고, 이를 독립적인 실행 파일로 컴파일하여 배포할 수 있다.
- 시스템 제어 및 확장: COM 지원, 외부 DLL 및 윈도우 API 호출, 정규 표현식 처리, 네트워크 통신(TCP/UDP) 등 고급 기능을 통해 시스템 제어 및 기능 확장이 가능하다.
- 다양한 환경 지원: 폭넓은 버전의 윈도우 운영체제와 호환되며, 유니코드 및 x64 환경을 지원한다.
이러한 기능들을 통해 오토잇은 시스템 관리, 소프트웨어 설치 자동화, 애플리케이션 테스트, 데이터 입력 자동화 등 다양한 분야에서 활용된다.[15][16]
3. 1. 기본 기능

오토잇은 배우기 쉬운 BASIC 계열의 문법을 사용하여 사용자가 쉽게 접근할 수 있도록 설계되었다. 일반적인 고급 프로그래밍 언어 수준의 함수, 반복문, 표현식 분석 기능을 제공한다.
주요 기능은 다음과 같다.
- 자동화 기능:
- * 키 입력과 마우스 움직임을 흉내 내어 사용자 입력을 자동화할 수 있다.
- * 창과 프로세스를 조작하고 제어할 수 있다.
- * 표준 윈도우 컨트롤(버튼, 입력 상자 등)을 직접 제어할 수 있다.
- * GUI를 생성하여 사용자 친화적인 프로그램을 만들 수 있다.
- * 윈도우 비스타의 사용자 계정 제어(UAC)와 호환되며, RunAs 함수를 통해 스크립트 실행 권한을 조절할 수 있다.
- 스크립트 및 배포:
- * 작성된 스크립트는 독립적인 실행 파일로 컴파일하여 오토잇이 설치되지 않은 환경에서도 실행할 수 있다.
- * 실행 파일에 데이터 파일을 포함시켜 함께 배포할 수 있다.
- 고급 기능 및 확장성:
- * 정규 표현식을 지원하여 복잡한 문자열 처리가 가능하다. (펄 호환 정규 표현식, PCRE 라이브러리 사용)
- * 컴포넌트 오브젝트 모델(COM)을 지원하여 다른 응용 프로그램과의 상호 작용이 가능하다.
- * 외부 DLL 파일이나 윈도우 API 함수를 직접 호출하고 구조체를 사용할 수 있어 기능 확장이 용이하다.
- * TCP 및 UDP 프로토콜을 지원하여 네트워크 통신 기능을 구현할 수 있다.
- * 콘솔 애플리케이션을 실행하고 표준 스트림에 접근할 수 있다.
- * 음성 파일을 재생, 일시 중지, 중지하는 등 제어할 수 있다.
다른 프로그래밍 언어에서 오토잇 기능을 사용할 수 있도록 AutoitX3** (DLL 및 COM 호출 방식)을 제공한다.
- * 라이브러리(UDF)를 통해 객체 지향 설계를 지원한다. (autoitobject UDF/DLL 필요)
- 환경 지원:
- * 유니코드를 지원한다. (버전 3.2.4.0부터)
- * 64비트 환경을 지원한다. (버전 3.2.10.0부터)
- * 윈도우 95부터 8까지 다양한 버전의 윈도우 운영체제와 호환된다.
이러한 기능들을 바탕으로 오토잇은 주로 마이크로소프트 윈도우 환경에서 시스템 관리, 모니터링, 유지 보수, 소프트웨어 설치 자동화 등 다양한 유틸리티 소프트웨어를 제작하는 데 사용된다. 또한, 사용자의 상호 작용을 시뮬레이션하여 애플리케이션 테스트나 자동 양식 입력 등에 활용되기도 한다.[15][16] 저비용 실험실 자동화 분야에서도 기기 동기화, 알람 모니터링 등에 응용될 수 있다.[15]
3. 2. 윈도우 및 프로세스 자동화
오토잇은 마이크로소프트 윈도우 환경에서 사용자의 키보드 입력이나 마우스 움직임을 흉내 내어 작업을 자동화할 수 있다. 이를 통해 단순히 프로그램을 실행하는 것을 넘어, 특정 창을 활성화하거나 숨기고, 실행 중인 프로세스를 관리하는 등 윈도우 자체와 프로세스를 직접 조작하는 것이 가능하다.더 나아가, 특정 프로그램 창 안의 버튼, 입력 상자, 목록 등과 같은 표준 컨트롤 각각에 대해서도 입력을 보내거나 상태를 확인하는 등의 제어가 가능하다. 예를 들어, 자동으로 특정 프로그램의 버튼을 클릭하거나 텍스트 입력 필드에 내용을 채워 넣는 스크립트를 작성할 수 있다. 이러한 기능들은 반복적인 작업을 자동화하거나, 사용자의 직접적인 개입 없이 시스템을 관리하는 데 유용하게 사용된다.
3. 3. 사용자 인터페이스
오토잇은 GUI를 생성하는 기능을 제공한다. 이를 통해 사용자는 메시지 박스나 입력 박스와 같은 기본적인 인터페이스 요소를 만들 수 있다.3. 4. 고급 기능
- 컴포넌트 오브젝트 모델(COM)을 지원하여 다른 응용 프로그램과의 상호 작용 및 제어가 가능하다.
- 유니코드 문자 인코딩을 지원하여(버전 3.2.4.0부터) 다양한 언어 환경에서의 호환성을 높였다.
- 64비트 아키텍처를 지원하여(버전 3.2.10.0부터) 최신 운영체제 환경에서도 효율적으로 작동한다.
- Autoit3.exe 실행 파일에는 디지털 서명이 포함되어 있어 프로그램의 신뢰성과 안정성을 확보했다. (Autoit3.exe에 한하여)
- 윈도우 비스타 이후 버전의 UAC(사용자 계정 컨트롤) 환경과 호환되어 권한 상승이 필요한 작업도 수행할 수 있다.
- TCP 및 UDP 프로토콜을 지원하여 네트워크 통신 기능을 구현할 수 있다.
- 사운드 파일을 재생, 일시 중지, 재개, 중지하거나 특정 위치로 이동하는 등 다양한 사운드 제어 기능을 제공한다.
- 정규 표현식(PCRE 라이브러리 기반)을 지원하여 복잡한 문자열 처리 및 검색 작업을 용이하게 한다.
- 외부 DLL 파일에 포함된 함수나 윈도우 API 함수를 직접 호출하여 시스템 기능을 확장할 수 있다.
- 다른 프로그래밍 언어에서 오토잇의 기능을 활용할 수 있도록 '''AutoItX3'''(DLL 및 COM 형태)를 제공한다. 이는 유니코드와 x64를 지원한다.
- 외부 라이브러리(UDF/DLL)를 통해 객체 지향 방식의 개발을 지원한다.[16]
- 콘솔 앱을 실행하고 표준 스트림(입력, 출력, 오류)에 접근하여 제어할 수 있다.
3. 5. 라이브러리 및 확장
오토잇은 다른 프로그래밍 언어에서도 그 기능을 활용할 수 있도록 '''AutoItX'''라는 확장 기능을 제공한다. AutoItX는 윈도우 API 호출 DLL과 COM 호출 방식으로 제공되며, 이를 통해 Perl, Ruby, Python 등 다양한 언어에서 오토잇의 내장 함수 일부를 사용할 수 있다.[16] 예를 들어, 이들 언어에서 AutoItX COM 객체를 생성하여 메모장과 같은 외부 프로그램을 실행시키는 것이 가능하다.또한, 오토잇은 라이브러리를 통해 객체 지향 설계를 지원한다. 이를 위해서는 사용자 정의 함수(UDF)나 DLL 파일이 필요할 수 있다.[16] ([https://web.archive.org/web/20100226105014/http://autoitobject.origo.ethz.ch/ autoitobject] 참고)
특정 애플리케이션을 위한 애드온 라이브러리 및 모듈도 사용할 수 있어, 오토잇의 기능을 특정 작업에 맞게 확장하는 것이 가능하다. 이러한 라이브러리와 확장 기능들은 오토잇이 단순한 자동화 스크립트를 넘어, 다른 개발 환경과 연동되고 더 복잡한 작업을 수행할 수 있도록 돕는다.
4. 문법
오토잇 스크립트의 문법은 코드의 구조와 실행 방식을 정의하는 규칙들로 이루어진다. 주요 문법 요소 중 하나는 연산자로, 스크립트 내에서 값에 대한 계산, 비교, 논리적 판단 등을 수행하는 데 사용된다. 오토잇은 다양한 종류의 연산자를 제공하며, 자세한 내용은 하위 섹션에서 다룬다.
4. 1. 연산자
오토잇은 스크립트 내에서 다양한 계산과 비교, 논리적 판단을 수행하기 위한 여러 종류의 연산자를 지원한다. 주요 연산자로는 덧셈, 뺄셈 등 기본적인 수학 계산을 위한 산술 연산자, 두 값의 관계를 비교하는 관계 연산자, 그리고 참/거짓 조건을 조합하는 논리 연산자가 있다. 각 연산자의 구체적인 종류와 사용법, 그리고 연산자들 간의 계산 우선순위는 하위 섹션에서 자세히 다룬다.4. 1. 1. 산술 연산자
wikitext| 산술 연산자 | 설명 |
|---|---|
| + | 더하기 |
| - | 빼기 |
| * | 곱하기 |
| / | 나누기 |
| & | 문자열 결합 |
| ^ | 제곱 |
4. 1. 2. 관계 연산자
| 관계 연산자 | 설명 |
|---|---|
| = | 같음 |
| == | 같음 (대소문자 구분) |
| 같지 않음 | |
| > | 크다 |
| >= | 크거나 같다 |
| < | 작다 |
| <= | 작거나 같다 |
4. 1. 3. 논리 연산자
wikitext| 논리 연산자 | 설명 |
|---|---|
| AND | 이고 |
| OR | 또는 |
| NOT | 아님 |
4. 1. 4. 연산자 우선순위
오토잇에서 사용되는 주요 연산자는 다음과 같다.| 관계 연산자 | 설명 |
|---|---|
| = | 같음 |
| == | 같음 (대소문자 구분) |
| <> | 같지 않음 |
| > | 크다 |
| >= | 크거나 같다 |
| < | 작다 |
| <= | 작거나 같다 |
연산자들의 우선순위는 다음과 같으며, 위에서 아래로 갈수록 우선순위가 낮아진다.
5. 활용 예시
오토잇은 마이크로소프트 윈도우 환경에서 GUI 자동화 및 간단한 스크립트 작성을 위해 널리 사용되는 도구이다. 사용하기 쉬운 문법을 통해 반복적인 작업을 자동화하거나, 특정 프로그램의 동작을 제어하는 등 다양한 용도로 활용될 수 있다.
이 섹션에서는 오토잇의 기본적인 사용법을 보여주는 "헬로 월드" 예제부터 시작하여, 실제 프로그램(윈도우 계산기)을 자동화하는 예시, 그리고 사용자 입력을 받아 간단한 계산(평균값 계산)을 수행하는 예시를 통해 오토잇의 주요 활용 사례를 살펴본다.
5. 1. 헬로 월드
ConsoleWrite("Hello World!" & @CRLF)
; ConsoleWrite는 함수이고 단 하나의 인자만 받아서 쓴 바이트 개수만큼 반환한다.
; &는 문자열 결합이며 이 연산자를 사용하면 어떤 변수라도 문자열로 변환된뒤 결합된다.
; @CRLF는 타 프로그래밍 언어에서 \r\n을 의미한다. (캐러지 리턴과 라인 피드)
; ;는 주석 표시에 사용된다.
위의 오토잇 스크립트 소스는 표준 출력에 "Hello World"를 출력한다.
그러나, 일반적으로 오토잇은 콘솔에 최적화되어 있지 않고 주로 GUI를 이용하기 때문에 대부분은 헬로 월드 프로그램으로 메시지 상자를 이용한다.
MsgBox(64, Default, "Hello World!")
; MsgBox는 메시지 상자를 띄우는 함수이고 사용자가 선택한 버튼에 따라서 반환되는 값이 달라진다.
; 첫 번째 인자로 넘긴 64는 MsgBox 함수에서 메시지 상자에 정보 아이콘을 추가할 때 사용된다.
; (몇몇 함수는 한 인자를 flag로 받아서 필요한 옵션을 추가하려면 해당 값만 추가하면 된다.)
; Default는 사용되는 부분에 따라서 다르게 이용된다, 기본적으로 기본값이다.
; (MsgBox 함수는 두 번째 인자가 Default 이면 스크립트의 이름(@ScriptName)을 출력한다.)
; 문자열은 "나 '로 감쌀 수 있다.
이 오토잇 스크립트 소스는 정보 아이콘을 포함한 메시지 상자를 출력한다.
다음은 상수 라이브러리를 포함하여 메시지 상자를 표시하는 예시이다.
; 상수 값의 라이브러리를 사용할 수 있도록 합니다.
#include
; "Hello, world!"를 메시지 상자에 표시합니다.
MsgBox($MB_SYSTEMMODAL, "제목", "Hello, world!")
아래는 메시지 상자를 표시하고 스크립트를 종료하는 예시이다.
; 메시지 박스에 "Hello, world!"를 표시하고 종료합니다.
MsgBox(0, "제목", "Hello, world!")
Exit
5. 2. 윈도우 계산기 자동화
다음은 오토잇을 사용하여 윈도우의 기본 계산기 프로그램을 자동화하는 예시 스크립트이다. 이 스크립트는 현재 연도를 4로 나누어 그 해가 윤년인지 아닌지를 판단하는 과정을 자동으로 수행한다.[1]; 상수 값 라이브러리를 사용할 수 있도록 합니다.
#include
; 6초의 시간 제한으로 메시지 상자를 표시합니다.
MsgBox($MB_OK, "주의", "자동화 중에는 키보드나 마우스를 만지지 마십시오.", 6)
; 윈도우 계산기를 실행합니다.
Run("calc.exe")
; 10초의 시간 제한으로 계산기가 활성화될 때까지 기다립니다.
WinWaitActive("[CLASS:CalcFrame]", "", 10)
; 10초 후에 계산기가 나타나지 않으면 스크립트를 종료합니다.
If WinExists("[CLASS:CalcFrame]") = 0 Then Exit
; 현재 연도를 계산기에 자동으로 입력합니다.
Send(@YEAR)
; 스크립트 속도를 약간 늦춰서 진행 상황을 볼 수 있도록 합니다.
Sleep(600)
; 자동으로 '4로 나누기'를 입력한 다음 600ms 동안 대기합니다.
Send("/4")
Sleep(600)
; Enter 키를 눌러 결과를 표시하고 600ms 동안 대기합니다.
Send("{ENTER}")
Sleep(600)
; Windows 단축키 Ctrl+C를 사용하여 결과를 클립보드에 복사합니다.
Send("^c")
; 클립보드의 내용을 변수로 선언하고 할당합니다.
Local $fResult = ClipGet()
; 변수에 소수점이 포함되어 있는지 확인합니다.
If StringInStr($fResult, ".") Then
; 5초의 시간 제한으로 메시지 상자를 표시합니다.
MsgBox($MB_OK, "윤년", @YEAR & "은 윤년이 아닙니다.", 5)
Else
; 이 메시지는 현재 연도가 윤년인 경우에만 표시됩니다.
MsgBox($MB_OK, "윤년", @YEAR & "은 윤년입니다.", 5)
EndIf
; 윈도우 계산기를 닫습니다 - 항상 정리합니다.
WinClose("[CLASS:CalcFrame]")
스크립트의 주요 동작 과정은 다음과 같다.
1. `Run("calc.exe")`: 윈도우 계산기를 실행한다.
2. `WinWaitActive(...)`: 계산기 창이 나타나고 활성화될 때까지 기다린다.
3. `Send(@YEAR)`: 오토잇의 내장 매크로인 `@YEAR`를 사용하여 현재 연도를 계산기에 입력한다.
4. `Send("/4")`: 숫자 4로 나누는 명령을 입력한다.
5. `Send("{ENTER}")`: 계산을 실행하기 위해 엔터 키를 입력한다.
6. `Send("^c")`: 계산 결과를 클립보드에 복사한다 (Ctrl+C 단축키 사용).
7. `Local $fResult = ClipGet()`: 클립보드에 복사된 내용을 `$fResult` 변수에 저장한다.
8. `If StringInStr($fResult, ".")`: 변수 `$fResult`에 소수점(`.`)이 포함되어 있는지 확인한다. 연도를 4로 나누었을 때 나누어 떨어지지 않으면(즉, 결과에 소수점이 있으면) 윤년이 아니다.
9. `MsgBox(...)`: 결과에 따라 현재 연도가 윤년인지 아닌지를 메시지 상자로 표시한다.
10. `WinClose(...)`: 열려 있는 계산기 창을 닫는다.
5. 3. 평균값 계산
오토잇 스크립트를 사용하여 사용자가 입력한 숫자들의 평균값을 계산하는 예제이다.아래는 콘솔 환경에서 작동하는 기본적인 평균 계산 스크립트이다.[1] 입력 상자를 통해 사용자로부터 쉼표(,)로 구분된 숫자 문자열을 입력받는다. 입력된 문자열은 `StringSplit` 함수를 사용하여 배열로 변환된다. 이후 배열의 각 요소를 순회하며 합계를 계산하고, 마지막으로 요소의 개수로 나누어 평균값을 구한다. 계산된 평균값은 소수점 둘째 자리까지 반올림되어 메시지 상자로 출력된다.
```autoit
; 평균 계산 함수 예제 (콘솔 기반)
; 작성자: JohnOne, 수정자: czardas
#include
_Example() ; 예제 함수 실행
Func _Example()
; 입력 상자를 표시하여 사용자에게 쉼표로 구분된 숫자 입력을 요청한다.
Local $sInput = InputBox("평균 계산", "쉼표로 구분된 숫자를 입력하세요 (예: 1,2,42,100,3)")
; 사용자가 취소했거나 오류가 발생하면 스크립트를 종료한다.
If @error Then Exit
; 입력받은 문자열을 쉼표를 기준으로 분리하여 배열에 저장한다.
Local $aSplit = StringSplit($sInput, ",")
; _Find_Average 함수를 호출하여 평균값을 계산한다.
Local $fAverage = _Find_Average($aSplit)
; 함수 실행 중 오류가 발생하면 스크립트를 종료한다.
If @error Then Exit
; 계산된 평균값을 메시지 상자에 표시한다.
MsgBox($MB_OK, "평균 계산", "결과: " & $fAverage)
EndFunc ;==>_Example
; 숫자 배열을 받아 평균값을 계산하는 함수
; $aArray 매개변수에 ByRef 키워드를 사용하여 함수 호출 시 배열 복사본을 만들지 않고 원본 배열을 참조한다.
; 이는 큰 배열을 다룰 때 메모리 사용량과 성능 면에서 효율적이다.
Func _Find_Average(ByRef $aArray)
; 입력값이 배열이 아니면 오류를 설정하고 반환한다.
If Not IsArray($aArray) Then Return SetError(1, 0, VarGetType($aArray))
; 배열의 첫 번째 요소($aArray[0])는 배열의 크기를 나타낸다. 유효한 요소는 $aArray[1]부터 시작한다.
; 배열 크기가 0이면 (빈 배열 또는 잘못된 입력), 오류를 설정하고 0을 반환한다.
If $aArray[0] = 0 Then Return SetError(2, 0, 0)
Local $iArraySum = 0 ; 숫자의 합계를 저장할 변수 초기화
; 배열의 각 요소를 반복 처리한다. (1부터 배열 크기까지)
For $i = 1 To $aArray[0]
; 각 요소의 값을 숫자로 변환하여 합계에 더한다.
; Number() 함수는 문자열을 숫자로 변환하며, 변환 불가능 시 0을 반환한다.
$iArraySum += Number($aArray[$i])
Next
; 합계를 배열 요소의 개수로 나누어 평균을 계산하고, 소수점 둘째 자리에서 반올림하여 반환한다.
Return Round($iArraySum / $aArray[0], 2)
EndFunc ;==>_Find_Average
```
다음은 GUI 환경에서 평균값을 계산하는 스크립트 예제이다.[2] `GUICreate` 함수를 사용하여 창을 만들고, `GUICtrlCreateInput`으로 입력 필드를, `GUICtrlCreateButton`으로 계산 버튼을 생성한다. 사용자가 입력 필드에 숫자를 입력하고 버튼을 누르면, `_findAvg` 함수가 호출되어 평균값을 계산하고 결과를 창의 레이블(`GUICtrlCreateLabel`)에 표시한다. 입력값 검증 로직이 포함되어 있어, 입력 형식이 잘못된 경우 "오류" 메시지를 표시한다.
```autoit
; 평균 계산 함수 예제 (GUI 기반)
#NoTrayIcon ; 트레이 아이콘 숨김
#include
#include
#Region ; --- GUI 생성 ---
$form = GUICreate("평균 계산", 300, 75) ; 창 생성
$label = GUICtrlCreateLabel("평균을 계산할 숫자를 쉼표(\",\")로 구분하여 입력하세요", 20, 5) ; 안내 레이블
$textbox = GUICtrlCreateInput("", 20, 20, 220) ; 숫자 입력 필드
$label1 = GUICtrlCreateLabel("=", 245, 20, 30, 20) ; 등호 레이블
$ansLabel = GUICtrlCreateLabel("", 255, 20, 50, 20) ; 결과 표시 레이블
$button = GUICtrlCreateButton("평균 계산", 100, 45) ; 계산 버튼
GUISetState(@SW_SHOW) ; 창 표시
#EndRegion ; --- END GUI ---
; GUI 메시지 루프
While 1
$msg = GUIGetMsg() ; 메시지 수신 대기
Switch $msg
Case $GUI_EVENT_CLOSE ; 창 닫기 버튼 클릭 시
Exit ; 스크립트 종료
Case $button ; 계산 버튼 클릭 시
Local $sInput = GUICtrlRead($textbox) ; 입력 필드 값 읽기
Local $vResult = _findAvg($sInput) ; 평균 계산 함수 호출
If $vResult = "malform1" Then ; 입력 형식 오류 시
GUICtrlSetData($ansLabel, "오류") ; 결과 레이블에 "오류" 표시
Else ; 정상 계산 시
GUICtrlSetData($ansLabel, $vResult) ; 결과 레이블에 계산된 평균값 표시
EndIf
EndSwitch
WEnd
; 쉼표로 구분된 숫자 문자열을 받아 평균값을 계산하는 함수
Func _findAvg($nums)
Local $sData ; 문자열 분리 결과를 저장할 배열 변수
Local $ans = 0 ; 합계 및 최종 평균값을 저장할 변수
; --- 입력값 검증 시작 ---
; 입력 문자열 양 끝의 공백을 제거한다.
$nums = StringStripWS($nums, 3)
; 입력 문자열 끝에 쉼표가 있으면 제거한다.
If StringRight($nums, 1) = "," Then $nums = StringTrimRight($nums, 1)
; 입력 문자열이 비어있거나 쉼표만 있는 경우 오류 처리
If $nums = "" Or StringReplace($nums, ",", "") = "" Then Return "malform1"
; 입력 문자열에 쉼표가 없는 경우 (숫자가 하나만 입력되었을 가능성)
If StringInStr($nums, ",") = 0 Then
; 입력값이 숫자인지 확인한다. 숫자이면 해당 값을 그대로 반환한다.
If IsNumber(Number($nums)) Then Return Number($nums)
; 숫자가 아니면 형식 오류로 처리한다.
Else Return "malform1"
EndIf
; --- 입력값 검증 끝 ---
; 입력 문자열을 쉼표 기준으로 분리하여 배열에 저장한다.
$sData = StringSplit($nums, ",")
; 배열의 첫 번째 요소($sData[0])는 분리된 요소의 개수이다.
; 배열의 각 요소를 반복 처리한다. (1부터 요소 개수까지)
For $i = 1 To $sData[0]
; 각 요소 값을 숫자로 변환하여 합계에 더한다.
; 만약 숫자로 변환할 수 없는 값이 있다면 Number() 함수는 0을 반환하므로,
; 좀 더 엄격한 검증을 원한다면 IsNumber() 함수로 확인 후 처리할 수 있다.
Local $num = Number($sData[$i])
If Not IsNumber($num) Then Return "malform1" ; 숫자가 아닌 값이 포함된 경우 오류 처리 (선택적)
$ans += $num
Next
; 합계를 요소 개수로 나누어 평균을 계산한다.
$ans = $ans / $sData[0]
; 필요하다면 Round() 함수를 사용하여 반올림할 수 있다. 예: Return Round($ans, 2)
Return ($ans) ; 계산된 평균값 반환
EndFunc ;==>_findAvg
6. 한계 및 알려진 문제
오토잇은 다음과 같은 한계와 알려진 문제가 있다.
6. 1. 한계
- 네임스페이스, 멀티스레딩을 지원하지 않는다.
- 기계어로 컴파일할 수 없다. 오토잇은 바이트 코드 (a3x)로의 변환만 지원한다.
- 코드 한 줄에 4095자를 초과하여 입력할 수 없다.
- 환경 변수에는 32767자를 초과하여 입력할 수 없다.
- 함수의 재귀 호출은 최대 5,100번까지만 가능하다.
- 배열은 최대 64차원까지 지원하며, 원소는 16,777,216개 (224개)를 초과할 수 없다.
- 얻을 수 있는 최대 창 제목과 텍스트 길이는 65,535자이다. 단, 창 제목 얻어오기는 윈도우 95 및 그 이전 버전에서는 불가능하다.
- GUI 폼에 포함될 수 있는 컨트롤의 최대 개수는 65,532개이다.
- COM 객체에서 처리할 수 있는 최대 이벤트 수는 64개이다.
- 커맨드 라인에서 받을 수 있는 매개변수는 최대 4,096자, 64개 단위이다. ($CmdLineRaw 문자열 변수와 $CmdLine 배열 관련)
- 트레이 메뉴의 최대 아이템 수는 505개이다.
- 트레이 메뉴의 최대 이벤트 수는 32개이다.
- 트레이 툴팁에 표시할 수 있는 최대 글자 수는 64자이다.
- 문자열이나 이진값은 2,147,483,647 바이트 (231 바이트) 이상을 변수에 저장할 수 없다.
- 변수의 포인터를 직접 얻을 수 없다. 다만, 구조체나 콜백 함수에 한해서는 포인터를 얻는 것이 가능하다.
6. 2. 알려진 문제
현재 오토잇에서 알려진 문제점은 다음과 같다.- 유니코드 버전에서 바이너리와 문자열을 변환할 때 ASCII 인코딩 관련 문제가 발생할 수 있다. 이는 바이너리와 문자열의 길이를 동일하게 처리하기 때문이며, 자체 함수나 윈도우 API를 여러 번 호출하여 해결할 수 있다.
- 아스키 버전에서는 멀티바이트 문자 처리에 문제가 있을 수 있다. 예를 들어, '테스트'라는 한글 문자열의 길이를 `StringLen` 함수로 확인하면 실제 글자 수인 3이 아닌 바이트 수인 6을 반환한다.
- DLL 관련 함수 사용 시 스크립트가 예기치 않게 강제 종료될 수 있다.
- 멀티스레딩을 공식적으로 지원하지 않으며, 이를 강제로 구현하려 할 경우 반복문이나 `Sleep` 함수 등에서 문제가 발생할 수 있다.
- `#include` 지시어 사용 시 자기 자신이나 상호 참조하는 파일을 포함하거나, `#include-once` 없이 함수가 포함된 소스 코드를 두 번 이상 포함하는 경우 문제가 발생할 수 있다. 또한 `FileInstall` 함수에서 지정한 소스 파일 경로가 잘못되거나 존재하지 않으면 변환되지 않는다.
- Obfuscator(코드 난독화 도구)가 일부 코드에서는 가독성을 완전히 낮추지 못하거나 오히려 오류를 발생시킬 수 있다. 특정 함수들(AdlibEnable, Call, Eval, GuiRegisterMsg, GuiSetOnEvent, GuiCtrlSetOnevent, HotKeySet, IsDeclared, TrayItemSetOnEvent, ObjEvent, Opt 설정의 "OnExitFunc") 사용 시 오류 발생 가능성이 있다.
- 배열 간의 직접적인 비교가 정상적으로 작동하지 않는다. 아래 예제처럼 배열의 내용이 같거나 다르더라도 비교 연산 결과가 예상과 다르게 나올 수 있다.
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
7. 커뮤니티
오토잇 커뮤니티는 2009년 6월 27일 오후 8시 50분을 기준으로 30,915명의 사용자와 660,898개의 글을 보유하고 있다. 최대 동시 접속자 수는 2007년 7월 13일 오전 5시 2분에 기록된 4,882명이다.[23]
8. AutoItX
COM 인터페이스나 DLL을 지원하는 스크립트 언어 또는 프로그래밍 언어에서 사용할 수 있도록 AutoItX라는 이름의 DLL 형식 파일이 제공된다. AutoItX를 이용하면, 다른 프로그래밍 언어 환경에서도 AutoIt이 기본적으로 제공하는 기능 중 일부를 가져와 사용할 수 있다.
참조
[1]
웹사이트
AutoIt Downloads
https://www.autoitsc[...]
AutoIt
2022-11-07
[2]
웹사이트
AutoIt 3.3.16.1 Release Candidate
https://www.autoitsc[...]
AutoIt
2022-11-07
[3]
웹사이트
Reply by Jon (AutoIt creator) to a forum topic discussing correct pronunciation
https://www.autoitsc[...]
[4]
서적
Citrix Metaframe Access Suite for Windows Server 2003
McGraw-Hill
[5]
웹사이트
User Defined Functions
https://www.autoitsc[...]
AutoIt
2021-07-16
[6]
웹사이트
AutoIt History
https://www.autoitsc[...]
2016-04-19
[7]
웹사이트
AutoIt v3.3.14.3 Released
https://www.autoitsc[...]
2018-02-02
[8]
웹사이트
AutoIt v3.3.14.5 Released
https://www.autoitsc[...]
2018-03-16
[9]
웹사이트
AutoIt Scripting Language
http://www.autoitscr[...]
[10]
웹사이트
Licensing Opinions
https://www.autoitsc[...]
2018-10-05
[11]
웹사이트
License
https://www.autoitsc[...]
2018-10-05
[12]
웹사이트
Index of /autoit3/files/archive/autoit
https://www.autoitsc[...]
2022-11-17
[13]
웹사이트
AutoIt
http://www.autoitscr[...]
[14]
웹사이트
Three thumbs up! - Offtopic
http://www.autohotke[...]
[15]
서적
Practical Laboratory Automation: Made Easy with AutoIt
Wiley V
2016-03
[16]
웹사이트
AutoitObject. a library to use object-oriented design in autoit
http://autoitobject.[...]
2021-07-16
[17]
URL
https://www.autoitsc[...]
[18]
URL
http://www.autoitscr[...]
[19]
웹인용
AutoIt Downloads
https://www.autoitsc[...]
AutoIt
2022-11-07
[20]
웹인용
AutoIt 3.3.16.1 Release Candidate
https://www.autoitsc[...]
AutoIt
2022-06-08
[21]
문서
[22]
URL
UDF 표준문서
http://www.autoitscr[...]
[23]
URL
오토잇 포럼의 통계, 맨 아래 참고
http://www.autoitscr[...]
[24]
URL
PluginOpen 함수 레퍼런스
http://www.autoitscr[...]
[25]
URL
오토잇 플러그인이 곧 등장합니다.
http://www.autoitscr[...]
[26]
URL
오토잇에서 어셈블리를 지원합니다.
http://www.autoitscr[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com
