사용예
여기에서는,AutoHotkey그리고 실현될 수 있는 기능의 일례를 소개한다.
덧붙여 예의 안으로 자동 조작등의 대상이 되고 있는 프로그램은, 특히 기술이 없는 경우 가공의 물건이다.
키 할당 변경
리맵기능을 이용하면, 특정의 키 조작에 다른 키를 할당할 수 있다.
대체로 모든 키와 mouse button, 죠이스틱의 버튼의 할당이 가능하다.
#h::left ;Win+H에←키를 할당
#j::down ;Win+J에↓키를 할당
#k::up ;Win+K에↑키를 할당
#l::right ;Win+L에→키를 할당
특정 소프트의 키 바인드 변경
#IfWinActive사령을 사용하면, 특정의 종류의 윈도우에서만 키 할당을 유효하게 할 수 있다.
윈도우의 판별에는 윈도우 타이틀이나 클래스명을 사용할 수 있다.윈도우의 클래스명은, 부속의AU3_Spy.exe그리고 조사할 수 있다.
Run커멘드와Process,WaitClose(을)를 사용하면, 스크립트 기동시에 대상 소프트를 기동해, 대상 소프트가 종료하면 스크립트도 종료한다고 하는 툴도 실현될 수 있다.
Run,notepad.exe ;메모장을 하나 기동
Process,WaitClose,notepad.exe ;메모장이 모두 종료할 때까지 대기
ExitApp ;스크립트를 종료한다
#IfWinActive ahk_class Notepad ;메모장의 윈도우가 액티브때만 할당을 실시하게 한다
^r::^h ;Ctrl+R에Ctrl+H(치환)(을)를 할당
#IfWinActive ;윈도우의 한정을 해제
복잡한 조작을1키에 할당
hot key에Send커멘드를 할당하는 것으로, 복잡한 조작을1키로 끝마칠 수 있게 된다.
표준적인GUI어플리케이션이라면,Alt+T키로 「툴(T)」(와)과 같은 액세스 키를 할당할 수 있었던 메뉴 항목을 조작하거나Tab키로 입력란의 사이를 포커스 이동하는 등, 키의 송신만으로도 대부분의 조작을 실시할 수 있게 되어 있다.
덧붙여 메뉴의 선택이나 입력란에의 입력에 대해서는,컨트롤 조작계 커멘드그리고 직접 조작하는 일도 가능.이 쪽이 고속이고 확실히 동작하지만, 스크립트를 작성하는 것이 다소 귀찮게 된다.
#IfWinActive ahk_class Notepad ;메모장의 윈도우가 액티브때만 할당을 실시하게 한다
^w::Send,!ow ;Alt+O그리고 「서식」메뉴를 표시해, 「W」키로 「우단에서 되풀이해」를 선택
#IfWinActive ;윈도우의 한정을 해제
백그라운드의 소프트를 조작
비액티브의 윈도우나 비표시의 윈도우에 키 조작을 보내는 기능을 이용하면, 사운드 플레이어나 상주 소프트등을 좋아하는 hot key로 직접 조작할 수 있게 된다.
#n:: ;Win+n에 할당
DetectHiddenWindows,On ;비표시의 윈도우를 대상으로 포함하도록(듯이) 한다
ControlSend,,^n,ahk_class SomeApplication ;대상 윈도우에Ctrl+N키를 송신
return ;hot key 써브루틴을 종료
프로그램 발사장치
Run커멘드로 프로그램을 기동하는 것으로, 발사장치를 실현할 수 있다.
단지 hot key에 할당하면, 홋트키란체로서 이용할 수 있다.
#1::Run,notepad.exe ;Win+1에 메모장의 기동을 할당
#2::Run,iexplore.exe ;Win+2에IE의 기동을 할당
이미 기동하고 있는 경우는, 그 프로세스를 액티브하게 한다
프로세스가 기동하고 있을지를 조사하는 기능이나, 특정 프로세스의 윈도우를 조작하는 기능을 사용하면, 이미 기동하고 있는 프로세스를 액티브화할 수 있다.
복수 프로세스를 실행할 필요가 없는데 중복 기동 방지 기능이 없는 소프트등을 사용하기 쉽게 할 수 있다.
Process,Exist,notepad.exe ;메모장이 기동하고 있을지를 조사한다
If ErrorLevel<>0 ;기동하고 있었을 경우(ErrorLevel변수에 프로세스ID하지만 격납된다)
WinActivate,ahk_pid %ErrorLevel% ;그 프로세스의 윈도우를 액티브하게 한다
else ;기동하지 않았던 경우
Run,notepad.exe ;메모장을 기동한다
프로그램을 상대 패스로 지정
실행하는 파일은 상대 패스로 지정할 수도 있다.
리모트 미디어내의 프로그램을 기동하는 란체를 만들고 싶을 때 등에 유효.
이하의 스크립트는, 실행하면 메뉴로 프로그램을 일람표 나타내 보여, 선택한 프로그램을 기동한다.
상주시켜 사용하고 싶은 경우에는, hot key 등에 「Menu,M1,Show」의 부분을 할당하면 좋다.
SetWorkingDir,%A_ScriptDir% ;상대 패스의 기준 폴더를 스크립트가 있는 폴더로 설정
Menu,M1,Add,.\apps\notepad\notepad.exe,Launch ;메뉴에 파일을 추가(이와 같이 몇행인가 쓴다)
Menu,M1,Show ;메뉴를 표시
return ;종료
Launch: ;메뉴가 선택되었을 때에 여기에서 앞이 실행된다
Run,%A_ThisMenuItem% ;선택된 메뉴명을 커멘드 라인으로서 실행
return ;써브루틴의 종료
환경 변수를 지정해 프로그램을 기동
스크립트중으로부터 환경 변수를 변경해 프로그램을 기동할 수 있다.
시스템의 환경 변수 설정을 변경하지 않고 , 설정에 환경 변수를 사용하는 프로그램을 이용하고 싶은 경우 등에 도움이 된다.
Windows의BAT파일에서도 동등이 할 수 있지만, 「A_ScriptDir」등의 편입 변수 덕분에 기술이 편해지고 있다.
EnvSet,USERPROFILE,%A_ScriptDir%\data ;설정의 보존처가 된다USERPROFILE의 패스를 변경
Run,%A_ScriptDir%\bin\someapp.exe ;프로그램을 기동
자동 조작
윈도우 상태를 판별하는 기능등을 이용하면, 프로그램이 처리를 끝내는 것을 기다리고 나서 계속을 실행할 수도 있다.
Run,app01.exe ;첫째의 프로그램을 기동
WinWait,ahk_class app01wnd ;프로그램의 윈도우가 표시될 때까지 대기
ControlSend,,{Tab}{Enter} ;그 윈도우에 처리를 개시시키기 위한 키 조작을 송신
WinWait,완료 ;처리 완료의 메세지가 나올 때까지 대기
WinClose ;그 윈도우를 닫는다
WinClose,ahk_class app01wnd ;프로그램의 윈도우를 닫는다
Run,app02.exe ;2손톱의 프로그램을 기동
;이하, 똑같이 작업을 기술해 나간다
폴더내의 파일을 모두 처리
파일Loop(을)를 사용하면, 폴더내의 파일 모두에 대해서 반복해 같은 처리를 실시할 수 있다.
자동 조작 기능과 조합하는 것으로,GUI어플리케이션으로의 정형 작업을 효율화할 수 있다.
처리의 도중에 파일의 삭제등의 처리를 실시하고 싶은 경우, 각종의파일 관련 커멘드하지만 이용할 수 있다.
Loop,D:\files\*.jpeg ;지정 폴더내의 모든JPEG파일에 대해 처리
{ ;반복 블록의 시작
Run,app.exe "%A_LoopFileLongPath%" ;대상 파일을 인수로서 프로그램을 기동
WinWait,ahk_class appwnd ;윈도우가 표시될 때까지 대기
ControlClick,Button1 ;그 윈도우의 버튼을 클릭한다
Loop{ ;처리가 끝날 때까지 반복
ControlGet,e,Enabled,,Button1 ;버튼이 사용 금지로 되어 있지 않은가를 취득
If e=1 ;사용 금지가 아니면, 처리 종료로 간주한다
break ;반복을 종료한다
}
WinClose ;윈도우를 닫는다
FileDelete,%A_LoopFileLongPath% ;대상 파일을 삭제
}
화면상의 영상을 판별한 자동 조작
화면상으로부터 특정의 화상에 일치하는 부분이나, 지정의 색이 되어 있는 부분을 검색하는 기능을 이용하면, 통상의 방법에서는 판별할 수 없는 상태도 판별할 수 있는 경우가 있다.
게임등의 자동화에 이용할 수 있을 가능성이 있지만, 입출력의 실현 방식이 특수하기 때문에AutoHotkey그럼 조작할 수 없는 소프트도 적지 않다.
Numpad0:: ;숫자 패드의 「0」키에 할당한다
Send,{F1}{Enter} ;개시 조작을 실행
Loop{ ;조건을 채울 때까지 반복
PixelSearch,,,0,0,100,100,0x0000FF,,RGB ;윈도우 좌상100*100피크셀의 범위에 청색의 부분이 있을지를 판별
if ErrorLevel=0 ;청색의 부분이 발견되면
break ;반복을 빠진다
}
Send,{Esc}{Esc} 종료 조작을 실행
return ;hot key 써브루틴을 종료
클립보드 경유로 문자열을 주고받아
Clipboard변수를 이용하면, 간단하게 클립보드내의 문자열 데이터를 조작할 수 있다.
Send커멘드와 조합하면, 브라우저나 에디터등에서 선택된 문자열을 취득하거나 caret 위치에 문자열을 삽입하거나 하는 일도 간단하게 할 수 있다.
#g:: ;Win+G키에 할당
bk=%ClipboardAll% ;클립보드의 내용을 백업
Clipboard= ;클립보드를 클리어
Send,^c ;Ctrl+C키를 송신
ClipWait ;클립보드에 텍스트가 격납될 때까지 대기
Run,http://www.google.com/search?q=%Clipboard% ;클립보드의 내용을 검색한다Google의URL(을)를 연다
Clipboard=%bk% ;백업 한 내용을 써 반환
return
클립보드의 감시
OnClipboardChange라벨을 기술하는 것으로, 클립보드의 내용이 변경되었을 때에 특정의 처리를 하도록(듯이) 할 수 있다.
#Persistent ;hot key등을 사용하지 않는 경우로, 스크립트를 상주시키고 싶을 때에 기술
OnClipboardChange: ;클립보드의 내용이 변경되었을 때에 실행되는 라벨
StringLeft,l,Clipboard,7 ;문자열의 선두7문자를 잘라
StringRight,r,Clipboard,4 ;문자열의 말미4문자를 잘라
if l=http:// ;선두가 「http://」(으)로
if r in jpeg,.jpg ;말미가 「jpeg」 「.jpg」의 어느 쪽일까들
Run,app.exe %Clipboard% ;그URL(을)를 인수에 프로그램을 기동
return ;써브루틴을 종료
정기 실행
타이머 기능을 이용하는 것으로, 정기적으로 특정의 처리를 실행 당한다.
단지 특정의 동작을 정기 실행하거나 윈도우나 프로세스등의 상태를 감시해 처리를 실행하거나라고 했던 것에 이용할 수 있다.
#Persistent ;hot key등을 사용하지 않는 경우로, 스크립트를 상주시키고 싶을 때에 기술
SetTimer,OnTimer,1000 ;지정 써브루틴을1초 마다 실행되도록(듯이) 한다
return ;스크립트 기동시에 실행되는 부분의 종료
OnTimer: ;타이머에 할당할 수 있는 써브루틴 라벨
Process,Exist,app.exe ;지정 프로그램이 실행되고 있는지를 검출
If ErrorLevel=0 ;실행되어 있지 않은 경우
Run,app.exe ;재기동한다
return ;타이머 써브루틴의 종료
지정 시각에 실행
편입 변수를 사용하면 현재 시각등의 정보도 이용할 수 있다.
1초 마다 써브루틴을 실행해, 지정 시각을 지나고 있으면 처리를 실행한다라고 하는 일도 가능하다.
#Persistent ;hot key등을 사용하지 않는 경우로, 스크립트를 상주시키고 싶을 때에 기술
time=%A_Now% ;현재 시각을 취득
EnvAdd,time,30,Minutes ;시각에30분 가산
SetTimer,OnTimer,500 ;지정 써브루틴을0.5초 마다 실행되도록(듯이) 한다
return ;스크립트 기동시에 실행되는 부분의 종료
OnTimer: ;타이머에 할당할 수 있는 써브루틴 라벨
If A_Now>%time% ;현재 시각이 지정 시각을 지나면
MsgBox,30분 경과 ;메세지를 표시
ExitApp ;스크립트를 종료
아무것도 조작을 하고 있지 않을 때에 실행
A_TimeIdlePhysical변수를 사용하는 것으로, 유저가 마지막에 어떠한 조작을 실시하고 나서 경과한 시간을 취득할 수 있다.
유저가 조작을 실시하지 않을 때를 가늠하고 처리를 실시하는 등의 기능을 실현될 수 있다.
#Persistent ;hot key등을 사용하지 않는 경우로, 스크립트를 상주시키고 싶을 때에 기술
SetTimer,OnTimer,1000 ;지정 써브루틴을1초 마다 실행되도록(듯이) 한다
return ;스크립트 기동시에 실행되는 부분의 종료
OnTimer: ;타이머에 할당할 수 있는 써브루틴 라벨
If A_TimeIdlePhysical>60000 ;1분 이상 조작을 실시하지 않으면
{
if flag<>1 ;실행되었는지의 플래그가 서있지 않으면
{
Run,app.exe ;프로그램을 실행
flag=1 ;플래그를 세운다
}
}else{ ;최근1분 이내에 조작을 했을 경우
flag=0 ;플래그를 해제한다
}
return ;타이머 써브루틴의 종료
Windows의 슛다운시에 처리를 실행
OnExit커멘드로 스크립트가 종료될 때 실행되는 처리를 설정할 수 있다.
A_ExitReason변수로 종료 이유를 판별하면,Windows하지만 슛다운 되려고 하고 있을 때 특정의 처리를 실행 당한다.
#Persistent ;hot key등을 사용하지 않는 경우로, 스크립트를 상주시키고 싶을 때에 기술
OnExit,WatchShutDown ;종료시에 실행되는 써브루틴을 할당
return ;스크립트 기동시의 처리를 종료
WatchShutDown: ;종료시에 실행되는 써브루틴 라벨
if A_ExitReason=ShutDown ;종료 이유가Windows의 슛다운인지 어떤지를 판별
RunWait,app.exe ;프로그램을 실행해, 종료까지 대기
ExitApp ;스크립트를 종료시킨다
음량의 제어
사운드를 재생하거나 음량의 설정을 변경하거나 하는 기능도 있다.
아래와 같은 예에서는, hot key로 음량을 조절할 때 마다Windows표준의 통지음을 재생하고 있다.
#up::
SoundSet,+10
SoundPlay,*64
return
#down::
SoundSet,-10
SoundPlay,*64
return
어플리케이션의GUI프론트엔드 작성
Gui커멘드를 사용하는 것으로, 입력 폼을 간단하게 작성할 수 있다.
복잡한 커멘드 라인 인수를 입력하지 않으면 사용할 수 없는 콘솔 프로그램을GUI(으)로부터 간단하게 사용할 수 있게 된다
Gui,Add,Text,,대상 파일 ;라벨을 추가
Gui,Add,Edit,x100 yp+0 vTarget w400, ;입력란을 추가
Gui,Add,CheckBox,x100 vC1 w100,옵션&1 ;체크 박스를 추가
;이와 같이 옵션의 체크 박스를 추가
Gui,Add,Button,gExec x400 yp+0,&OK ;실행 버튼을 추가
Gui,Show ;윈도우를 표시
return ;스크립트 기동시의 처리를 종료
Exec: ;실행 버튼에 할당할 수 있는 써브루틴
Gui,Submit,NoHide ;폼의 내용을 변수에 반영
cmd=app.exe "%Target%" ;기본이 되는 커멘드 라인을 작성
if C1=1 ;체크 박스가ON그렇다면
cmd=%cmd% /o ;커멘드 라인 옵션을 추가
;이와 같이 체크 박스의 처리를 기술
Run,%cmd% ;커멘드 라인을 실행
return
GuiDropFiles: ;윈도우에 파일이 드롭 되었을 때에 실행된다
StringSplit,fn,A_GuiEvent,`n ;파일명의 일람을 한개씩에 분할
GuiControl,,Target,%fn1% ;에디트 박스에 첫째의 파일명을 설정
return ;써브루틴을 종료
GUI어플리케이션의 프론트엔드
조작 자동화 기능을 이용하면, 사용 방법이 귀찮고 알기 힘들다GUI프로그램을 간단한 조작으로 이용할 수 있도록 할 수도 있다.
Gui,Add,Button,gB1,처리A(을)를 실행 ;버튼1(을)를 추가
;이와 같이 몇개의 버튼을 추가
Gui,Show ;윈도우를 표시
return ;스크립트 기동시의 처리를 종료
B1: ;버튼1에 할당한 써브루틴 라벨
Run,app.exe ;프로그램을 기동
WinWait,ahk_class AppWnd ;윈도우가 표시될 때까지 대기
ControlSend,,!eg!ef!x{Space}!o ;까다로운 조작을 송신
ExitApp ;스크립트를 종료시킨다
;이와 같이 몇개의 버튼에 대응한 써브루틴을 기술
템플릿으로부터 파일을 작성
Transform커멘드를 사용하는 것으로, 미리 준비한 템플릿 파일에 변수의 내용을 묻을 수 있다.
이것을 이용하면, 입력 폼에 입력된 내용을 바탕으로 처리 설정 파일을 작성해 프로그램을 기동한다고 말한 것도 간단하게 실시할 수 있다.
;GUI작성 부분은 생략.
Gui,Add,Button,gExec x400 yp+0,&OK ;실행 버튼을 추가
Gui,Show ;윈도우를 표시
return ;스크립트 기동시의 처리를 종료
Exec: ;실행 버튼에 할당할 수 있는 써브루틴
;폼의 입력 내용을 바탕으로, 템플릿에 묻는 문자열을 생성하는 처리를 기술
FileRead,template,%A_ScriptDir%\template.ini ;템플릿 파일을 읽어들여
Transform,inifile,Deref,%template% ;템플릿내의 변수 참조를 전개
FileDelete,%A_ScriptDir%\setting.ini ;기존의 파일을 삭제
FileAppend,%inifile%,%A_ScriptDir%\setting.ini ;내용을 파일에 보존
Run,app.exe "/ini=%A_ScriptDir%\setting.ini ;프로그램을 기동
return ;써브루틴을 종료
template.ini의 내용은 이하와 같은 요령으로 기술한다.
「%」(으)로 둘러싸 변수명을 기술한 부분이 변수에 격납된 내용에 치환된다.
[General]
TargetFile=%File%
SearchStr=%SearchStr%
IdleTime=%idle%
#이하약어