AutoHotKey(오토핫키) 설명서 RegEx

Posted by 발전소장
2014. 8. 13. 16:34 AutoHotKey

정규 표현

AutoHotkey v1.0.45이후에서는,RegExMatch()(와)과RegExReplace()그리고, 정규 표현에 의한 검색·치환을 실시할 수 있다.
또,SetTitleMatchMode그리고RegEx(을)를 지정하면, 윈도우의 타이틀등의 지정에 정규 표현을 사용할 수 있다.

AutoHotkey그리고 준비되어 있는 정규 표현은,Perl 5에 탑재되고 있는 것과 대체로 호환의PCRE(Perl Compatible Regular Expressions)이다.
이하로 설명하는 표현을 사용하는 것으로, 여러가지 텍스트를 하나의 패턴 문자열로 검색할 수 있다.

특수한 문자 표현

특수한 문자는, 직접 정규 표현중에 묻어도 인식되지만, 이하의 표현에서도 나타낼 수 있다.

\C 임의의1아르바이트
\a알람, 벨 문자(\x07)
\e이스케이프 문자(\x1b)
\f개페이지(\x0c)
\n개행(\x0a)
\r왕복대 리턴(\x0d)
\tTab(\x09)
\cX각종 제어 문자.
X그리고 지정한 문자의ASCII코드의 상위2비트를0(으)로 한 문자.(Control-X)
예를 들면, 「\cJ」(은)는 「\n」(을)를 나타낸다.
\xHH HH그리고 지정되었다16진수로 나타내진다1아르바이트.
예를 들면, 「\x0a」(은)는 개행 문자(\n)(을)를 나타낸다.

또,.*?+[{|()^$\등의 기호는, 「\.」(이)나 「\[」(와)과 같이, 전에 「\」(을)를 붙여 이스케이프 할 필요가 있다.
그 이외의 문자는, 「\」(을)를 붙여도 붙이지 않아도 같게 된다.
예를 들면, 「\@」(은)는 「@」(을)를 나타낸다.
다만, 「X」옵션이 유효하게 되어 있는 경우는, 「\v」 등, 의미의 준비되어 있지 않은 알파벳을 이스케이프 하면 에러가 된다.

복수의 문자의 어떤 것인지를 의미하는 표현

이하와 같은 표현을 이용하는 것으로, 조건에 일치하는 문자1문자를 나타낼 수 있다.

.개행을 제외한 임의의 문자
「s」옵션이 지정되어 있는 경우는, 개행도 포함한다.
\w 1문자의 단어 구성 문자([0-9a-zA-Z_])
\W 단어 구성 문자 이외의1문자
\d 1문자의 반각 숫자([0-9])
\D 반각 숫자 이외의1문자
\s 1개의 반각 스페이스
\S 반각 스페이스 이외의1문자
[char-list] char-list안에 열거되고 싶은 차이인가의 문자
[^char-list] char-list안에 열거된 문자 이외의 임의의 문자

char-list에는, 단지 문자를 열거할 뿐만 아니라, 이하와 같은 표현도 사용 가능하다.
이것들은, 복수 조합해 늘어놓을 수도 있다.

c1-c2
c1(으)로부터c2의 사이의 문자(례:「0-9」)
\s,\S,\w,\W,\d,\D,\xHH
[:alnum:]
알파벳과 숫자
[:alpha:]
알파벳
[:word:]
단어 구성 문자
[:blank:]
공백 문자(스페이스, 탭등)
[:cntrl:]
제어 문자
[:digit:]
십진수자
[:graph:]
인자 가능한 동시에 표시 가능한 문자(스페이스는 인자 가능하지만 표시 가능하지 않다)
[:lower:]
알파벳의 소문자
[:print:]
인자 가능한 캐릭터(=제어 문자 이외의 캐릭터)
[:punct:]
구두점(통상의 문자, 숫자, 제어 문자, 스페이스의 머지않아도 아닌 캐릭터)
[:space:]
스페이스, 탭, 개페이지
[:upper:]
알파벳의 대문자
[:xdigit:]
십육진수자

반복을 나타내는 정규 표현

몬지, 몬지 클래스, 식 집합의 뒤로 이하의 양지정자를 붙이면, 패턴의 반복을 나타낼 수 있다.
예를 들면, 「\d+」(은)는1문자 이상의 반각 숫자에, 「(ab){1,3}」(은)는 「ab」또는 「abab」또는 「ababab」에 매치한다.

?1회 또는0회
*0회이상
+1회이상
{n,m}n회이상m회이하
n(와)과m의 상한은65536
{n,}n회이상
{,n}0회이상n회이하 ({0,n})
{n}n회

덧붙여 통상의 양지정자는 「탐욕」이며, 복수의 매치 결과를 생각할 수 있는 경우, 제일 길게 매치하는 것이 채용된다.
「??」(이)나 「+?」, 「{1,5}?」(와)과 같이 양지정자의 뒤에 「?」(을)를 붙이면, 「무욕」이 되어, 제일 짧게 매치하는 것을 채용한다.
예를 들면, 「aaa<b>bbb</b>ccc」(을)를 타겟으로 「<.*>」(을)를 검색했을 경우, 「<b>bbb</b>」에 성냥 해 버린다.
「<.*?>」(을)를 검색하면, 「<b>」에 매치한다.

「?+」(이)나 「*+」, 「{1,5}+」(와)과 같이, 양지정자의 뒤에 「+」(을)를 붙이면, 「탐욕」이 되어, 뒤로 계속 되는 패턴에 관계없이 반드시 제일 길게 매치한 것을 채용하게 된다.
예를 들면, 「---abcdef---」(을)를 타겟으로 「\w+f」(을)를 검색하면 매치하지만, 「\w++f」(을)를 검색하면 성냥 하지 않는다.「\w++」(이)가 어쨌든지 「abcdef」까지를 채용하려고, 후에 계속 되는 정규 표현에 「f」(을)를 양보하려고 하지 않기 때문이다.

특정의 장소에 매치하는 표현

이하의 표현은, 문자는 아니고 장소에 매치한다.
예를 들면, 「^」(은)는 「문자열의 선두의 문자」가 아니고, 「선두의 문자의 전」에 매치한다.

^ 문자열의 선두.
「m」옵션이 지정되어 있는 경우는, 각 행의 줄머리.
$ 문자열의 말미.
다만, 말미가 개행이었던 경우, 그 직전에 성냥.(「D」옵션이 지정되어 있는 경우는, 진짜 말미에 성냥)
「m」옵션이 지정되어 있는 경우는, 각 행의 줄 끝.
\A 「m」옵션의 유무에 관계없이, 문자열의 선두
\Z 「m」옵션의 유무에 관계없이, 문자열의 말미.
다만, 말미가 개행이었던 경우, 그 직전에 성냥.(「D」옵션이 지정되어 있는 경우는, 진짜 말미에 성냥)
\z 「m」옵션이나 「D」옵션의 유무에 관계없이, 문자열의 진짜 말미
\G 검색의 개시 위치.
RegExMatch()의StartingPos그리고 지정한 위치.
RegExReplace()에 있어서의2채워 이후의 치환에서는, 전회 매치한 범위의 직후가 된다.
\b 단어의 단락.
\w(단어 구성 문자)에 해당하는 문자와\W(비단어 구성 문자)에 해당하는 문자가 서로 이웃이 되고 있는 장소
\B 단어의 도중.
\w(단어 구성 문자)에 해당하는 문자가 서로 이웃이 되고 있는 장소

선택

|」(으)로 단락짓는 것으로, 복수의 정규 표현중 어떤 것이나 하나에 매치하는 문자열을 검색할 수 있다.
Shift|Ctrl|Alt」(와)과 같이,3개이상을 늘어놓아도 괜찮다.
정규 표현의 도중에 짜넣고 싶은 경우는, 후술의 그룹화를 사용해, 「(Shift|Ctrl|Alt)+[A-Z]」(와)과 같이 한다.

regexp1|regexp2 regexp1(와)과regexp2의 어딘가에 성냥

덧붙여 「|」(으)로 단락지어 늘어놓을 수 있었던 정규 표현은, 제일 왼쪽의 것으로부터 테스트되어 최초로 매치한 것보다 오른쪽의 것은 테스트되지 않는다.
예를 들면, 「Auto(\w+)」와「(\w+)Hotkey」(은)는 모두 「AutoHotkey」에 매치하지만, 「Auto(\w+)|(\w+)Hotkey」(을)를 「AutoHotkey」에 성냥 시켰을 경우, 「(\w+)Hotkey」의 부분은 사용되지 않고, 「\2」(은)는 비운다.

그룹화

정규 표현을 「(」 「)」(으)로 둘러싸는 것으로 그룹화 할 수 있다.
정규 표현의 도중에 「|」에 의한 선택등을 포함하고 싶은 경우나, 매치한 문자열을 후술의 후방 참조로 사용하고 싶은 경우 등에 사용한다.

(regexp)그룹화 해, 번호에 관련 짓는다
번호는, 「(」의 출현한 차례로1(으)로부터 할당해진다.
(?P<name>regexp) 그룹화 해,name그리고 지정한 이름에 관련 짓는다.
동시에, 번호에도 관련지어를 한다.
(?:regexp)그룹화만 실시해, 번호에 관련지어 하지 않는다
(?>regexp)regexp(을)를 검색하지만, 매치한 뒤 백 트럭 하지 않는다(탐욕)
번호에는 관련지어 되지 않는다
(?:regexp){1}+」라고 거의 같다.

그룹에 매치한 문자열의 호출(후방 참조)

이하의 표현을 사용하는 것으로, 그룹화 된 정규 표현에 매치한 문자열과 같은 문자열을 검색할 수 있다.
예를 들면, 「<(\w+).*?>.*?</\1>」(은)는, 임의의HTML태그로부터 대응하는 종료 태그까지의 문자열에 매치한다.

\num num그리고 지정한 번호에 관련 지을 수 있었던 그룹에 마지막에 매치한 문자열과 같은 것에 성냥(\1~\99)
(?P=name) name그리고 지정한 이름에 관련 지을 수 있었던 그룹에 마지막에 매치한 문자열과 같은 것에 성냥

예측·돌아와 읽기

예측에서는, 직후에 특정의 패턴에 일치하는 문자열이 존재하는 장소에 매치한다.
일단처의 문자열을 조사한 뒤, 원의 장소로 돌아오므로 「예측」이라고 한다.
이 기능을 이용하는 것으로, 복잡한 조건으로 검색하거나 치환의 정규 표현을 간략화하거나 할 수 있다.

(?=regexp) regexp에 매치하는 문자열의 직전에 성냥
(?!regexp) regexp에 매치하는 문자열의 직전이 아닌 장소에 성냥
(?<=regexp) regexp에 매치하는 문자열의 직후에 성냥
regexp(은)는 길이가 미리 확정하고 있는 정규 표현이 아니면 안 된다
(?<!regexp) regexp에 매치하는 문자열의 직후가 아닌 장소에 성냥
regexp(은)는 길이가 미리 확정하고 있는 정규 표현이 아니면 안 된다

재귀 호출

이하의 표현을 사용하는 것으로, 정규 표현의 전부 또는 일부를 호출해 사용할 수 있다.
이 호출은, 호출하는 정규 표현 자체안에 기술할 수도 있다.
예를 들면, 「외모로 둘러싸인 문자열」이라고 하는 정규 표현안에, 그 정규 표현의 재귀 호출을 짜넣는 것으로, 외모가 상자가 된 문자열을 올바르게 검색할 수 있다.

(?R) 정규 표현 전체를 재귀 호출
(?num) 번호 지정으로 그룹을(재귀)호출(「(?1)」~ 「(?99)」)
(?P>name) 이름 그룹을(재귀)호출

조건 분기

조건에 일치할 때만 특정의 패턴을 검색하거나 조건에 따라 검색하는 패턴을 바꾸거나 할 수 있다.

(?(condition)yes-regexp|no-regexp) condition하지만 진정한 때는yes-regexp, 가짜 때는no-regexp(을)를 사용하고 매칭을 실시한다
(?(condition)yes-regexp) condition하지만 진정한 때는yes-regexp(을)를 사용하고 매칭을 실시하지만, 가짜 때는 아무것도 실시하지 않는다.
「(?(condition)yes-regexp|)」와 같다.

condition에 숫자나 이름을 지정했을 경우는, 그 정규 표현 그룹에 매치하는 것이 있었을 때에 실로 된다.
예측이나 돌아와 읽기의 조건을 기술할 수도 있다.

또, 「R」(을)를 지정했을 경우는, 재귀 호출로 불려 가고 있을 때에 실로 된다.
이것에 의해,1단계만 상자가 되어 있는 문자열을 검색할 수 있다.

옵션의 부분적 변경

후술의 옵션은, 정규 표현의 도중에 일부만 다른 설정으로 변경할 수도 있다.

(?imsxUX-imsxUX)이후의 옵션을 변경
(?imsxUX-imsxUX:regexp) regexp의 부분의 옵션을 변경

imsxUX-imsxUX에는ON(으)로 하는 옵션과OFF(으)로 하는 옵션을 기술한다.
예를 들면, 「i」(으)로 하면 「i」옵션이ON에, 「-i」(으)로 하면 「i」옵션이OFF(이)가 된다.
「i-s」라고 하면 「i」옵션이ON(이)가 되면서 「s」옵션이OFF(이)가 된다.

코멘트

(?#text)정규 표현중에 코멘트를 묻을 수 있다.
코멘트가 되어 있는 부분은, 실제로는 무시된다.
덧붙여text에 「)」(을)를 포함하는 것은 할 수 없기 때문에 주의.

옵션

AutoHotke의 정규 표현에서는, 패턴의 최초로 「)」(으)로 단락지어 옵션을 지정한다.
준비되어 있는 옵션은 이하와 같다.

i
반각 알파벳의 대문자·소문자를 구별하지 않는다
m
「^」와「$」(이)가 각 행의 줄머리·줄 끝에 성냥 하게 된다.
s
.」(으)로 개행 문자도 매치하도록(듯이) 한다
x
패턴중의 공백 문자(반각 스페이스,Tab문자, 개행 문자)라고 「#」(으)로부터 줄 끝까지의 문자열을 무시한다.
「[]」 안의 문자는, 무시되지 않는다.
긴 정규 표현을 텍스트 파일 등에 기술하고, 코멘트등을 포함하고 싶은 경우에 사용한다
A
매치 개소의 시작이 검색 개시 위치와 일치하고 있지 않으면 안 되게 한다
D
문자열의 말미가 개행이었다고 나무에서도, 「$」(이)가 문자열의 진짜 말미에 매치하도록(듯이) 한다.
「m」옵션이 지정되어 있을 때는 무시된다.
J
동명의 이름 포획식 집합을 허가한다
U
「*」 「+」 「?」 「{n,m}」등의 양지정자의 디폴트를 무욕(가능한 한 짧은 것에 성냥)(으)로 한다. 반대로, 「*?」 「+?」 「??」 「{n,m}?」 등은, 탐욕(가능한 한 긴 것에 성냥)(이)가 된다.
X
Perl에는 없다PCRE독자적인 기능을 유효하게 한다.
통상은, 「\g」(와)과 같이 특별한 의미의 준비되어 있지 않은 알파벳을 「\」(으)로 이스케이프 했을 때, 「g」(을)를 나타내고 있는 것으로 간주하지만, 「X」옵션이 지정되어 있으면, 정규 표현 구문 에러로서 다루어진다.
장래의PCRE의 확장으로 「\g」에 특별한 의미가 주어졌을 때에 이상이 발생하는 것을 예방할 수 있다.
S
시간을 들여 상세하게 패턴을 분석하는 대신에, 매칭 처리를 고속화한다.
복잡한 정규 표현을 몇번이나 사용하는 경우에 유효.
한 번 분석된 정규 표현은, 최대로100개까지 캐쉬되고, 같은 정규 표현을 사용할 때에 분석 처리를 생략 할 수 있다.
`n
.」기호나, 「m」옵션, 「D」옵션등에서 「개행」으로서 다루어지는 문자를 「`n」(으)로 한다.
디폴트는 「`r`n」.
`r
개행을 「`r」(으)로 한다.

2아르바이트 문자에의 대응

가명이나 한자등의2아르바이트 문자는 고려되지 않는다.

AutoHotKey(오토핫키) 설명서 KeyList

Posted by 발전소장
2014. 8. 13. 16:33 AutoHotKey

키/mouse button명 일람

마우스(NT계 전용)

LButton
왼쪽 버튼
RButton
오른쪽 버튼
MButton
중앙 버튼(휠 클릭)
WheelDown
휠하 회전
WheelUp
휠상 회전

WheelDown,WheelUp에 할당할 수 있었던 써브루틴이 실행될 때 , 「A_EventInfo」변수에 휠이 회전한 양이 격납된다.
많은 경우 「1」이지만, 재빠르게 휠을 돌렸을 경우등에는2이상이 된다.

2000/XP마셔

XButton1
확장 버튼1
XButton2
확장 버튼2

Joystick

Joy1...Joy32
버튼.test script에서 각 버튼의 번호를 조사할 수 있다.
수식 키와의 편성은 지정할 수 없다.

이하는 hot key 할당에는 사용할 수 없지만,GetKeyState그리고 상태를 조사하는 것이 가능.

JoyX, JoyY, JoyZ, JoyR, JoyU, JoyV
아날로그 입력의 각 축 상태
JoyPOV
point-of-view 컨트롤
JoyName
JoyStick명
JoyButtons
사용할 수 있는 버튼수를 취득(올바르지 않은 경우도 있다)
JoyAxes
사용할 수 있는 아날로그 입력의 수를 취득
JoyInfo
사용할 수 있는 기능을 취득.이하의 문자 중 사용할 수 있는 것을 연결한 문자열이 된다.
Z (Z축), R (R축), U (U축), V (V축), P (point-of-view 컨트롤), D (the POV control has a limited number of discrete/distinct settings), C (the POV control is continous/fine)

복수의 죠이스틱이 있는 경우

복수의 죠이스틱이 접속되고 있고,2번째 이후를 사용하고 싶은 경우, 전에 죠이스틱의 번호를 매긴다.
례: 2Joy1 제2죠이스틱의1버튼

Keyboard

a...zA...Z
그 알파벳의 키.대문자에서도 소문자에서도, 그 알파벳의 키 단독을 지정한 것이 된다.
0...9
숫자 키.
!등
Shift키와 조합해 입력하는 기호는, 그 편성을 지정한 것과 같다.
「!」의 hot key는 「Shift+1」(을)를 눌렀을 때에 실행된다.
그 외의 기호
기본적으로 그 문자 자신이지만, 「;」 등 특별한 의미를 가지는 키는 「`;」(와)과 같이이스케이프할 필요가 있다.
취직 심볼은 이스케이프 불요.「^」(은)는 「^」키, 「^^」(은)는 「Ctrl+^」의 의미가 된다.
Space
Tab
Return
Esc
BS
Del
Ins
Home
End
PgUp
PgDn
Up
Down
Left
Right
ScrollLock
CapsLock
NumLock
NumpadDiv
숫자 패드의 「/
NumpadMult
숫자 패드의 「*
NumpadAdd
숫자 패드의 「+
NumpadSub
숫자 패드의 「-
NumpadEnter
숫자 패드의 「Enter

이하는NumLock하지만OFF때

NumpadDel
NumpadIns
NumpadClear
NumpadUp
NumpadDown
NumpadLeft
NumpadRight
NumpadHome
NumpadEnd
NumpadPgUp
NumpadPgDn

이하는NumLock하지만ON때

Numpad0
Numpad1
Numpad2
Numpad3
Numpad4
Numpad5
Numpad6
Numpad7
Numpad8
Numpad9
NumpadDot
.
F1 …… F24
function key
AppsKey
우하(분)편에 있는 context menu를 내는 키
Shift
Ctrl
Alt
LWin
좌Win키
RWin
우Win키

이하는NT계 전용

LShift
LCtrl
LAlt
각각, 왼쪽의Shift,Ctrl,Alt키
RShift
RCtrl
RAlt
각각, 오른쪽의Shift,Ctrl,Alt키
PrintScreen
CtrlBreak
Pause
Break
Help
Sleep

멀티미디어 키보드등에 대해서 있는 키

Browser_Back
Browser_Forward
Browser_Refresh
Browser_Stop
Browser_Search
Browser_Favorites
Browser_Home
Volume_Mute
Volume_Down
Volume_Up
Media_Next
Media_Prev
Media_Stop
Media_Play_Pause
Launch_Mail
Launch_Media
Launch_App1
Launch_App2

키코드에 의한 지정

일본어 키보드 특유의 키나, 그 외 상기 일람에 없는 키는, 가상 키코드나 스캔 코드를 직접 지정하는 것으로 지정할 수 있다.(스캔 코드는NT계만)
키보드 드라이버의 사양등에 의해, 키 입력 이벤트를 취득할 수 없는 경우도 있다.드라이버를 바꿔 넣는 것으로 개선될 가능성이 있다.

키코드를 조사하려면 , 「#InstallKeybdHook」지령을 포함한 스크립트를 읽어들여, task tray 아이콘을 더블 클릭 하고 윈도우를 내, 메뉴의 「View」→「Key history」(으)로 키 이력을 표시한다.F5키로 최신의 정보로 갱신 가능.

hot key 라벨로 지정하는 경우, 「vkYY」(이)나 「scXXX」(YY의 부분은 가상 키코드,XXX부분은 스캔 코드)(와)과 지정한다.
Send커멘드로 송신하는 경우는, 「vkYYscXXX」(와)과 같이 지정한다.

반각/전각
vkF3sc029/vkF4sc029 (IME의ON/OFF그리고 발생하는 이벤트가 다르지만,Send커멘드로 송신하는 경우는 어디라도 같다)
변환
vk1Csc079
무변환
vk1Dsc07B
히라가나 카타카나
vkF2sc070

AutoHotKey(오토핫키) 설명서 Hotstrings

Posted by 발전소장
2014. 8. 13. 16:30 AutoHotKey

Hotstring

개요

핫 스트링은, 유저가 특정의 문자열을 타이프 쳤을 때에 액션을 발생 당하는 기능이다.
입력된 문자열을 다른 문자열을 입력하는 자동 치환형과 hot key와 같이 스크립트를 실행하는 타입이 있다.

NT계 전용.

자동 치환형

::btw::by the way

상기와 같이 설정하면, 「btw」라고 하는 단어를 입력했을 때에, 그것이BackSpace그리고 삭제된 후, 대신에 「by the way」라고 입력된다.
치환 후의 텍스트의 지정은Send커멘드와 같이 특수 키등도 지정할 수 있지만,(현재)변수를 전개하는 것은 할 수 없다.
치환 후의 텍스트에2아르바이트 문자를 사용할 수 없기 때문에, 스크립트 실행형으로 클립보드를 경유해 붙이는 등 방법을 취할 필요가 있다.

이 기능은 주로 영어권으로의 텍스트 입력의 절력화를 상정하고 있다고 생각되어 일본어 환경에서는 용도가 한정된다.
거기서, 이 페이지에서는, 스크립트 실행형에 관계가 있는 부분을 주로 설명한다.

스크립트 실행형

::kita-::
Clipboard=렝━━━━━━(刪_)━━━━━━ !!!!!
Send,^v
Return

상기와 같이 설정하면, 「kita-」라고 타이프 쳤을 때에, 「kita-」(이)가BackSpace그리고 삭제된 후,AA하지만 붙일 수 있다. 타이프 친 텍스트가 삭제되지 않게 하려면 , 후술의 옵션으로 「B0」(을)를 지정한다.

종료 문자

::btw::by the way」라고 설정했을 경우, 단지 「btw」라고 입력하는 것 만으로는 핫 스트링은 발동하지 않는다.
단어의 후에 종료 문자가 입력될 필요가 있다.
디폴트의 종료 문자는, 「-()[]{}':;"/\,.?!{Enter}{Space}{Tab}」이다.

#Hotstring EndChars -()[]{}:;'"/\,.?!`n `t

상기와 같이 기술하면, 종료 문자를 변경할 수 있다.
이 지령은 다른 옵션과 달리, 스크립트중에서1회만 유효하고, 모든 핫 스트링에 영향을 준다.

후술 하는 옵션으로 「*」(을)를 지정하면, 핫 스트링 마다 종료 문자를 필요로 하지 않게 설정할 수도 있다.

자동 치환형의 경우, 종료 문자는 치환 후의 텍스트가 입력된 뒤에 입력된다.(Enter키 이외)
예를 들면, 「btw/」라고 입력하면, 「by the way/」(이)가 된다.
이것은 「O」옵션으로 무효화할 수 있다.

스크립트 실행형의 경우, 종료 문자의 입력은 납치되어 없었던 일이 되어 버린다.
스크립트 실행형의 경우, 편입 변수 「A_EndChar」(으)로 입력된 종료 문자를 알 수 있다.

대문자 소문자의 차이

통상은 대문자 소문자의 차이를 무시해 발동한다.
또한, 치환 후의 텍스트가 알파벳열의 경우, 「btw」→「by the way」, 「Btw」→「By the way」, 「BTW」→「BY THE WAY」(와)과 같이 치환된다.
이 동작은, 「C1」옵션으로 무효화할 수 있다.

대문자 소문자를 구별시키고 싶은 경우는, 「C」옵션을 사용한다.

::abc::」와「::ABC::」(와)과 같은 대문자 소문자 이외가 같은 핫 스트링 라벨은 존재할 수 없다.
: :abc::」(와)과 같이, 옵션을 지정하는 부분에 반각 스페이스를 들어갈 수 있으면, 다른 라벨명으로 인식되게 되어, 대문자 소문자 이외가 같은 핫 스트링을 설정할 수 있다.

옵션

옵션의 지정의 방법에는2가지 있다.
복수의 옵션을 지정할 때는, 스페이스에서 단락지어도 단락짓지 않아도 좋다.

#Hotstring지령

#Hotstring C

상기와 같이 기술하면, 그 이후에 정의되는 핫 스트링의 설정을 변경할 수 있다.

개별 지정

:*:btw::by the way

개별의 핫 스트링의 설정을 지정하려면 , 최초의 「:」의 사이에 옵션을 기술한다.

옵션 일람

SI
자동 치환으로,Input모드를 사용해 자동 입력을 실시한다.(디폴트)
각 모드의 자세한 것은SendMode커멘드의 설명을 참조.
SP
자동 치환으로,Play모드를 사용해 자동 입력을 실시한다.
SE
자동 치환으로,Event모드를 사용해 자동 입력을 실시한다.
B0
입력된 텍스트를BackSpace그리고 삭제하지 않는다.
덧붙여(1.0.17현재)종료 문자의 문자도 삭제되지 않고, 더욱 자동 입력의 후에 종료 문자가 입력되어 버린다.
B
B0옵션을 해제·무효화한다.
Z
발동한 시점에서, 키 입력의 기억 버퍼를 클리어 한다.
이 옵션을 사용하지 않는 경우, 예를 들어 「B0」 「*」 「?」옵션포함의 「uma」라고 하는 핫 스트링이 발동한 직후는, 기억 버퍼에 「uma」(이)가 들어가 있기 위해, 계속해 「ibou」라고 입력하면, 「umaibou」라고 하는 핫 스트링이 발동해 버린다.
Z0
Z옵션을 해제·무효화한다.
C
대문자 소문자를 구별한다.
C1
대문자 소문자는 무시하면서, 입력 내용의 대문자 소문자의 따로 따라 자동 입력되는 내용의 대문자 소문자를 변화시키는 기능을 무효화한다.
Kn
키의 입력 간격을 지정한다.
BackSpace에 의한 삭제나 자동 치환에서는,1키 마다 여기서 지정한 밀리 세컨드만 사이를 비워 입력된다.
디폴트는 「0」(으)로, 이 경우 「Sleep 0」(을)를 실행했을 때와 같이, 다른 프로세스에 의한 세치기를 허락한다.
「-1」(을)를 지정하면, 세치기를 허락하지 않고 최고의 속도로 입력된다.
O
자동 치환으로, 마지막에 종료 문자를 입력하지 않는다
P
스크립트 실행형에 있어서의세치기 우선도(을)를 지정한다
R
치환 후의 텍스트로 「{Enter}」(와)과 같은 특수 키의 해석을 실시하지 않고, 기술되고 있는 텍스트를 그대로 입력한다.
*
종료 문자 없이 발동하도록(듯이) 한다.
?
단어의 도중에 있어도 발동하게 된다.
통상은, 알파벳 키를 타이프 친 직후에 일치하는 입력이 있어도 무시된다.
C0,O0,R0,*0,?0
각 옵션의 지정을 무효화·해제한다

비고

BackSpace에 의한 다시 놓아

핫 스트링의 감시는,BackSpace에 의한 수정을 고려한다.
예를 들면, 「br{BackSpace}tw」(은)는 「btw」에 매치한다.
다른 비문자 키는 무시되어 감시 내용은 리셋트 된다.

마우스 클릭을 했을 경우도, 감시 내용은 리셋트 된다.

텍스트 입력란 이외로의 동작

핫 스트링은 텍스트를 입력할 수 없는 장소에서도 완전히와 같이 동작한다.
자동 입력되는 키에 의해서 예기치 못한 동작이 되는 경우도 있으므로 주의가 필요.

IME사용시의 동작

핫 스트링은IME하지만ON때에도 유효하다.
IME하지만ON때에 텍스트가 자동 입력되면, 「btw」→「by(이)라고 원y」와 같이 히라가나에 변환되어 이상해져 버린다.

또, 「kita-」(와)과 같은 모음을 포함한 핫 스트링에서는, 「왔다―」(와)과 같이 미확정 문자열의 문자수가 줄어 들어 버리기 위해,BackSpace에 의한 자동 삭제로 여분으로 삭제를 해 버린다.
예를 들면,IME그리고 「주먹밥」을 확정하고, 다음에 「왔다―」(을)를 입력했을 경우,2문자 불필요하게 삭제되어 「도깨비렝━(刪_)━!!」가 되어 버린다.
이것을 회피하려면 , 「kt-」(와)과 같이 모음을 포함하지 않는 핫 스트링에 할당하면 좋다.
또,IME의 설정에 따라서는, 「Kita-」(와)과 같이Shift(을)를 누르면서 영문자를 입력하면, 알파벳 상태로 입력된다.
이 경우, 타이프 친 문자수와BackSpace그리고 삭제해야 할 문자수는 일치할 것이다.
따라서, 「Kita-」(와)과 같이 핫 스트링을 대문자로 치기 시작하도록 하면, 불필요한 문자까지 삭제되어 버리는 것은 회피할 수 있다.
잘못해 「왔다―」라고 입력하고 있을 때 발동해 버리는 것을 피하고 싶으면, 「:C:Kita-::」(와)과 같이 「C」옵션을 붙이고, 대문자 소문자가 일치하지 않을 때는 발동하지 않게 설정하면 된다.

문자수의 상한

핫 스트링으로서 사용할 수 있는 문자수의 상한은40문자.
치환 후의 문자열은1행의 길이의 상한이다16,383까지 가능.

복수 매치시의 우선도

입력이 복수의 핫 스트링에 매치하는 경우, 먼저 지정하는 것이 우선된다.

:?:btw::by the way
::abtw::aaaaa

위의 예에서는, 「abtw」라고 입력했을 때 「btw」의 부분이 「by the way」에 치환된다.

AutoHotKey(오토핫키) 설명서 Hotkeys

Posted by 발전소장
2014. 8. 13. 16:03 AutoHotKey

Hotkeys

hot key는 「::」(코론2개)(을)를 따른 써브루틴 라벨로 해서 기술된다.
hot key가 입력되면 해당 라벨의 다음의 행에 처리가 옮겨, 최초로return인가exit하지만 실행될 때까지가 처리된다.

#y::
  WinActivate, Untitled - Notepad
  return

hot key에 할당하는 동작이1커멘드 뿐이라면, 「::」(코론2개)의 직후에 커멘드를 기술하는 것으로,1행으로 끝마칠 수 있다.return(은)는 불요.

#y::WinActivate, Untitled - Notepad

(비고) 프로그램은의사 multi-thread(이)가 되어 있다.
hot key 이벤트의 실행 도중에, 다른 hot key 이벤트가 실행되는 일도 가능.

수식 심볼

이하의 기호로 수식 키등을 지정할 수 있다.
복수의 심볼을 동시에 지정할 때는, 「!+」(와)과 같이 사이에 아무것도 열지 않고 연속해 기술한다.

+ Shift
^ Control
! Alt
# Win (미논)
< 왼쪽의 모디파이아키를 사용(NT계 전용)
례: <!a:: 좌Alt+A
> 오른쪽의 모디파이아키를 사용(NT계 전용)
례: >+<^a:: 좌Ctrl+우Shift+A
<^>! AltGr(일부의 나라의 키보드 레이아웃에 존재)
* 임의의 수식 키를 나타내는 와일드 카드(NT계 전용)
례1: *a:: Ctrl/Alt/Shift/Win상태에 관계없이,A키가 밀리면 발동
례2: *+a:: Ctrl/Alt/Win상태에 관계없이,Shift키가 밀린 상태로A키가 밀리면 발동
~ 이벤트를 빼앗지 않고, 그대로 시스템에 통한다.(NT계 전용)
례: ~*a::SoundPlay,D:\AutoHotkey\typesound.wav A키가 밀렸을 때에 사운드를 울린다.
(비고)Alt+Tab대체계 커멘드하지만 할당할 수 있었을 경우, 이 지정에 관계없이 입력은 납치된다.
$ RegisterHotkey()(이)가 아니고, 강제적으로 키보드 훅으로 이벤트를 취득한다.(NT계 전용)
써브루틴내에서 그 hot key 자신을 송신하는 경우,RegisterHotkey()그럼 hot key 이벤트가 재귀적으로 불려 가 버린다.
#UseHook지령을 사용하면,$(을)를 생략 할 수 있다.

사용할 수 있는 키명에 대해서는,Key List(을)를 참조

키 라벨의 사양

hot key 라벨은 통상의 라벨과 같이Gosub(이)나Goto그리고 이동할 수도 있다.
또, 아래 예의 같게, 복수의 hot key에 같은 써브루틴을 할당하는 일도 가능.

~*a::
~*b::
~*c::
SoundPlay,D:\AutoHotkey\typesound.wav
return

키의 무효화

동작으로서return문장만을 할당하면, 키를 무효화할 수도 있다.

RWIN::return

hot key를 스크립트의 실행중에 등록하거나 무효화/유효화하거나 하려면 ,Hotkey커멘드를 사용한다.

NT계 전용의 기능

Uphot key

키명의 뒤에 반각 스페이스에 이어 「Up」라고 붙이면, 키를 놓았을 때에 발동하는 hot key를 설정할 수 있다.(례:「a up」 「LShift up」)

Up없음의 hot key와 함께 설정하는 일도 가능.
Up없음의 hot key를 설정하고 있지 않는 경우에서도, 눌러 인하 이벤트는 납치된다.
예를 들어, 「a up::Send b」라고 하면,A키를 눌러 내렸을 때에는 아무것도 일어나지 않게 된다.
「~a::return」(을)를 모두 설정해 두면,A키가 눌러 내릴 수 있었을 때에는 보통으로A키가 밀렸을 때의 동작을 하게 된다.

밀어 올려 이벤트는, 「~」의 유무에 관계없이, 납치되지 않고 시스템에 통지된다.
예를 들어, 「LShift Up::return」(와)과 같이 해도,LShift키를 떼어 놓을 수 없게 할 수 없다.

콤비네이션 키

&」(을)를 사용하는 것으로,2개의 임의의 키(죠이스틱 이외)의 편성을 hot key로 지정하는 것이 가능.
3개이상의 키를 지정하거나+^!#그리고 수식 키를 추가하거나는 할 수 없다.
첫째로 지정한 키가 수식 키가 되어, 첫째의 키를 누르면서 둘째의 키를 누르면 발동한다.
첫째의 키를 누르고, hot key를 발동시키지 않고 떼어 놓으면, 첫째의 키 단독에 할당할 수 있었던 써브루틴이 실행된다.
첫째의 키 자체의 원래의 기능은 무효화된다.

Numpad0 & Numpad1::AltTab
Numpad0 & Numpad2::ShiftAltTab
Numpad0::Run, calc.exe

첫째의 키에 치르다(~)(을)를 붙이면, 그 키는 무효화되지 않고, 보통으로 입력된다.
하나에 붙여 두면, 첫째의 키가 같을 다른 hot key에서는 지정되어 있지 않아도, 그 키는 무효화되지 않게 된다.

~RButton & LButton::MsgBox,오른쪽 클릭하면서 왼쪽 클릭했다
RButton & WheelUp::MsgBox,오른쪽 클릭하면서 휠을 위에 돌렸다

상기예에서는, 오른쪽 클릭하면서 왼쪽 클릭하거나 휠을 위에 돌리거나 한다고 메세지가 나오지만, 오른쪽 클릭은 보통으로 액티브 윈도우에 보내진다

AltTab/ShiftAltTab/AltTabMenu/AltTabAndMenu/AltTabMenuDismiss

이러한 커멘드는, hot key에 직접 할당하는 것 마셔 가능한 특별한 커멘드.
보통으로 「Send,!{Tab}」라고 하면, 써브루틴이 끝날 때 마다Alt+Tab의 화면이 사라져 버려, 온전히 동작하지 않지만,AltTab/ShiftAltTab(을)를 할당하면, 수식 키를 떼어 놓을 때까지 화면이 사라지지 않게 된다.
또,AltTabMenu(을)를 사용하면,Alt+Tab화면의 표시의 유무를 교체된다.
AltTabAndMenu그리고 강제적으로 표시,AltTabMenuDismiss그리고 표시되고 있으면 소거라고 하는 동작도 할당할 수 있다.
또,Esc키가 밀리면, 선택된 윈도우로 전환하지 않고 표시를 종료할 수 있다.
수식 키가 없는 단독 키에AltTab/ShiftAltTab(을)를 할당했을 경우, 그대로는 아무것도 일어나지 않고,AltTabMenu그리고Alt+Tab의 화면을 표시하고 있는 동안만, 변환 조작을 할당할 수 있다.
덧붙여 수식 키는 좌우 어느 쪽인지를 지정해야 한다.「<+a」(와)과 같이 수식 심볼을 사용하는지, 「LShift & a」(와)과 같이 콤비네이션 키로 지정한다.

  LAlt & WheelDown::AltTab
  LAlt & WheelUp::ShiftAltTab

Alt+휠로 윈도우 변환

  MButton::AltTabMenu
  WheelDown::AltTab
  WheelUp::ShiftAltTab

중앙 클릭으로 변환 화면을 표시해, 휠로 선택, 다시 중앙 클릭하면 변환 화면이 사라져 전환이 실행된다.

Lock계 키의ON/OFF

SetNumlockState등의 커멘드로,NumLock키등의ON/OFF상태를 고정할 수 있다.

SetNumlockState, AlwaysOn

Windows표준 hot key

Win+E(이)나Win+R등의Windows표준 hot key도 동작을 덧쓰기하거나 무효화하거나 할 수 있다.
자세한 것은override page참조

숫자 패드와NumLock

숫자 패드의 각 키는NumLock상태에 의해서2대로의 hot key를 할당할 수 있다.
NumLock상태에 관계없이1개의 동작을 할당하고 싶은 경우는, 다음과 같이 한다.

NumpadEnd::
Numpad1::
MsgBox, This hotkey is launched regardless of whether Numlock is on.
return

Input커멘드

Input커멘드로 일련의 키스트로크(keystroke)를 받는 것으로,2스트로크 키나 단축 입력등의 기능을 실현할 수 있다.

^c::
    Input,InputChar,C I L1 T2,{Esc},x,s
    if ErrorLevel=Match
    {
        if InputChar=x
            Send,!{F4}
        if InputChar=s
            Send,^s
    }
    return

AutoHotKey(오토핫키) 설명서 Function

Posted by 발전소장
2014. 8. 13. 16:00 AutoHotKey

함수

함수란, 인수로서 값을 받아, 어떠한 처리를 실시해, 결과를 돌려주는 써브루틴이다.
통상의 커멘드와 달라,의 안에 짜넣어 사용할 수 있다.

함수의 정의 방법

함수의 정의는, 이하와 같이 한다.
함수의 내용이1행만으로도, 「{」 「}」(은)는 생략 할 수 없다.

함수명(인수 리스트){
함수 본체
}

함수명에는, 반각영숫자와 「_」(언더 바)등을 사용할 수 있다.
인수 리스트에는, 인수의 이름이나 타입, 디폴트치를 「,」(으)로 단락지어 열거한다.
함수가 인수를 필요로 하지 않는 경우, 인수 리스트는 비운다.
함수명과 「(」의 사이에는, 스페이스등을 넣어선 안 된다.
함수내에서는, 인수로서 주어진 값을 변수와 같이 참조할 수 있다.
「return」에 이어 기술했다하지만 돌아가 값으로 해서 호출해 바탕으로 돌려주어진다.
return하지만 없는 경우, 함수의 마지막 「}」까지 실행된 시점에서, 하늘의 문자열이 돌려주어진다.

아래와 같은 예에서는,Add그렇다고 하는 함수명의 함수를 정의하고 있다.
Add함수는x(와)과y의2개의 인수를 받아,x(와)과y(을)를 더한 값을 돌아가 값으로 해서 돌려준다.

Add(x, y){
	return x + y
}

함수의 정의는, 함수 정의의 내부 이외라면 어디에 써도 상관없다.
스크립트 실행중에, 함수 정의의 행에 실행이 옮겼을 경우, 함수 정의의 마지막까지가 스킵 되고 실행은 되지 않는다.

함수의 호출

함수명에 이어 「()」의 안에 인수를 「,」단락으로 열거한 것이 함수 호출이다.
함수 호출은, 식안에 짜넣어 사용할 수 있다.

Sum:=Add(2,3)

상기의 예에서는,Add함수의 인수x(으)로서 「2」, 인수y(으)로서 「3」(을)를 주어 호출해, 그 결과를 변수 「Sum」에 대입하고 있다.

Add(Add(1,2),3+4)」(와)과 같이, 함수 호출의 인수에 식이나 함수 호출을 기술하는 일도 가능.
그 경우, 우선 안쪽의 식이 왼쪽의 인수로부터 순서에 계산되어 다음에 그것들을 인수로서 외측의 함수가 실행된다.

변수에 대입하지 않고, 함수의 호출만을 실시하는 것도 가능하다.
아래와 같은 예에서는,2개의 인수의 화를 다이얼로그 표시하는 함수를 정의해, 인수에2(와)과3(을)를 주어 호출하고 있다.

ShowAdd(x,y){
	MsgBox,% x+y
}
ShowAdd(2,3)

함수중에서 다른 함수를 호출하는 것도 가능하다.
호출의 심도의 상한은159회로,160번째의 호출을 하려고 하면AutoHotkey의 프로그램이 부정 종료한다.

동적 함수명으로의 호출해

함수 호출의 함수명 부분에는, 「%FuncName%()」(이)나 「Func%Index%()」(와)과 같이 변수 참조를 짜넣을 수 있다.
이 경우, 실행시에 그 변수를 전개한 이름의 함수가 불려 간다.
예를 들면, 「Index」(이)가 「1」의 때에 「Func%Index%()」(이)가 실행되면, 「Func1()」라고 하는 함수가 불려 간다
만약 그 함수가 존재하지 않거나, 인수의 수가 맞지 않았던 경우, 함수의 결과는 길이 제로의 문자열이 된다.

인수의 디폴트치

Add(p1,p2,p3=0,p4=0,p5=0){
	return p1+p2+p3+p4+p5
}

상기와 같이, 인수 리스트의 인수명의 뒤에 「=」에 이어 디폴트치를 기술하는 것으로, 인수를 생략 했을 경우에는 그 값이 사용되도록(듯이) 하는 것이 가능하다.
상기의 예에서는, 「Add(1,2)」라고 했을 경우는3하지만 돌아가, 「Add(1,2,3)」라고 하면6하지만 돌아간다.
디폴트치로서 설정할 수 있는 것은, 「10」(이)나 「1.001」, 「1.11e+10」, 「""」, 「"this is default value"」(와)과 같은 정수,true,false뿐인다.
복수의 인수를 생략 하는 것은 가능하지만, 인수의 도중만을 생략 할 수 없다.상기의 예에서는, 「Add(1,2,,3)」라고 할 수 없다.
또, 이것에 수반해, 「x, y=0, z」(와)과 같이 디폴트치를 가지는 인수의 뒤에, 디폴트치를 가지지 않는 인수를 설정할 수 없다.

인수의 참조 인도

함수에 값은 아니고 변수의 참조를 건네주는 것을 참조 인도라고 말한다.
참조 인도를 이용하면, 함수로부터 호출해 원의 변수를 변경할 수 있다.
이것을 이용하면,2개이상의 정보를 호출해 바탕으로 알리는 것이 가능하게 된다.
인수를 참조 인도로 하려면 , 인수 리스트로 인수명의 전에 「ByRef 」(을)를 붙인다.
참조 인도가 되어 있는 인수에 변수 이외의 식을 지정하면 실행시 에러가 된다.미정도리의 변수를 지정하는 것은 가능.

아래와 같은 예에서는,2개의 변수의 내용을 바꿔 넣는 함수 「Swap」(을)를 정의하고 있다.

Swap(ByRef Left, ByRef Right){
	temp := Left
	Left := Right
	Right := temp
}

참조 인도에서는, 함수 호출시에 변수의 내용의 카피를 하지 않기 때문에, 큰 문자열을 인수에 건네줄 때의 효율이 좋아진다.

ByRef인수에도 디폴트치를 지정할 수 있다.
인수가 생략 되었을 경우는, 디폴트치를 격납한 로컬 변수가 작성된다.

변수의 유효 범위

통상의 함수에서는, 함수 중(안)에서 사용되는 함수 중(안)에서 사용되는 변수(편입 변수를 제외하다)(은)는, 함수내에서만 유효한 로컬 변수가 된다. 로컬 변수는, 함수의 소환 마다 작성되고 함수로부터 돌아올 때에 파기된다.
따라서, 이하의 스크립트는 기대 그대로의 동작을 하지 않는다.

;x의 값을 설정하는 함수를 만들고 싶다
SetX(val){
	x:=val
}
x:=0
SetX(10)
MsgBox,%x%

글로벌 변수의 이용

함수내로부터 통상의 변수(글로벌 변수)에 액세스 하려면 , 「global」에 이어 액세스 하고 싶은 변수명을 기술한다.복수의 변수명을 「,」(으)로 단락지어 정리하고 쓸 수 있다.
이하의 스크립트는 기대 그대로의 동작이 된다.

;x의 값을 설정하는 함수를 만들고 싶다
SetX(val){
	global x
	x:=val
}
x:=0
SetX(10)
MsgBox,%x%

또, 변수의 사용을 선언하는 것과 동시에, 변수에 값을 대입할 수도 있다.
이 때, 「=」연산자는, 비교 연산자는 아니고 「:=」연산자로 간주해진다.

SetX(val){
	global x=val
}

조건 분기를 사용해도, 조건에 의해서 변수를 글로벌로 할까 로컬로 할까를 바꾸는 것은 할 수 없다.

디폴트의 유효 범위를 글로벌로 한다

함수의 최초로 「global」라고만 쓴 행이 있으면, 함수내에 기술된 모든 변수가 글로벌 변수가 된다.
이 때, 「local」에 이어 변수명을 쓴 행이 있으면, 그 변수만 로컬 변수가 된다.
글로벌 변수의 사용 선언과 같이, 복수의 변수명을 「,」(으)로 단락지어 정리하고 쓰거나 선언과 동시에 대입하는 일도 가능.

SetX(val){
	global
	x=val
}

함수의 최초로 「global」(이)가 없어도, 「local」의 변수 선언이 있으면, 그 이외의 변수는 글로벌 변수로서 다루어진다.

함수내에서 「Array%i%」(와)과 같은 동적 변수를 사용했을 경우, 로컬 변수로서 다루어진다.
다만, 그 이름의 로컬 변수가 존재하지 않고, 글로벌 변수라면 존재하는 경우, 그 글로벌 변수가 사용된다.
로컬에도 글로벌에도 존재하지 않고, 변수를 새롭게 작성해야 하는 경우, 디폴트의 유효 범위에서 작성된다.

StringSplit커멘드등에서 배열을 작성하는 경우, 통상은 로컬 변수로서 작성된다.
다만, 배열의 최초의 요소가global선언되고 있는 경우는, 모든 요소가 글로벌 변수로서 작성된다.

스태틱 변수

같은 함수 중(안)에서 공유되는 변수를 작성하려면 「static」에 이어 변수명을 쓴다.복수의 변수명을 「,」(으)로 단락지어 정리하고 쓸 수 있다.
스태틱 변수는, 함수 중(안)에서 밖에 참조할 수 없지만, 같은 함수로 하나의 변수가 공유된다.

AAA(){
	static CalledTimes:=0
	CalledTimes++
	MsgBox,%CalledTimes%번째
}

스태틱 변수의 초기화에서는, 수치나 문자열의 정수를 대입하는 것 마셔 가능.
스태틱 변수는, 스크립트의 기동시에 한 번만 초기화된다.

재귀 호출

함수중에서 그 함수 자신을 호출하는 테크닉을 재귀 호출이라고 한다.
아래와 같은 예는, 인수로 주어졌다n의 계승을 요구하는 함수이다.

Factorial(n){
	If n=1
		return 1
	else
		return n*Factorial(n-1)
}

덧붙여 재귀 호출을 실시하는 함수로, 「ByRef」에 의한 참조 인도의 인수에 로컬 변수를 주면, 호출처의 해당 변수가 참조되게 되어 버린다.
따라서, 이하의 스크립트는 올바르게 동작하지 않는다.

Factorial(ByRef n){
	If n=1			;(2)여기의n그럼 호출원의x(이)가 아니고, 불려 간 측의x하지만 참조되어 버린다
		return
	x:=n-1
	Factorial(x)	;(1)여기서 로컬 변수x(을)를 참조 건네주면
	n*=x
}

함수내로부터의Gosub/Goto/Exit

함수내에서는, 함수의 내외의 써브루틴을 「Gosub」(으)로 호출할 수 있다.
함수외의 써브루틴을 호출했을 경우, 불려 간 써브루틴에서는 함수내의 로컬 변수는 호출할 수 없다.한편, 함수에 「global」(이)가 선언되어 있지 않아도, 모든 글로벌 변수를 이용할 수 있다.

함수내에서는, 함수내의 라벨에게만 「Goto」(으)로 점프 할 수 있다.
함수외의 라벨에Goto그리고 점프 하려고 했을 경우, 그 행은 무시된다.

함수내에서 실행중의스렛드(을)를 종료하는 「Exit」커멘드를 실행하면, 함수의 호출해 원래대로 돌아가는 일 없이 그 시점에서 스렛드가 종료한다.

함수 라이브러리 스크립트

라이브러리 스크립트는 「%A_MyDocuments%\AutoHotkey\Lib\」인가,AutoHotkey.exe(이)가 있는 폴더내의 「Lib」폴더에 격납한다.
스크립트 파일명중, 확장자(extension)를 제외한 이름 부분이 라이브러리명이 된다.
라이브러리 스크립트에는, 라이브러리명과 같은 이름의 함수나, 라이브러리명의 뒤에 「_」에 이어 임의의 문자열이 붙은 이름의 함수(례:「MyLib_FuncA()」)(을)를 기술한다.
그 이외의 함수나 라벨도 정의할 수 있어 읽기원스크립트로부터 호출할 수 있지만, 이름이 중복 하지 않게 주의할 필요가 있다.

스크립트 읽기시, 스크립트중에서 정의되어 있지 않은 함수의(비동적 함수명으로의)호출이 기술되고 있으면, 그 함수명에 「.ahk」(을)를 붙인 파일명의 스크립트가 라이브러리 폴더로부터 검색되어 만약 존재하면 추가로 읽힌다.
해당하는 파일이 존재하지 않고, 함수명에 「_」(이)가 포함되는 경우, 마지막 「_」의 전까지를 파일명으로 한 파일이 검색된다.
이러한 파일을 읽어들여도, 해당하는 함수가 정의되어 있지 않은 경우는, 스크립트 read error가 된다.

읽힌 스크립트는, 원의 스크립트의 말미로#Include된 것과 같은 상태가 된다.
라이브러리 스크립트내에서, 함수의 밖에 써브루틴 라벨등을 기술하면, 의도되어 있지 않은 상황으로 실행되어 버리는 경우가 있다.
라이브러리 스크립트의 선두에return(을)를 기술해 두면 방지할 수 있다.

라이브러리 스크립트내에서도, 다른 라이브러리 스크립트의 함수를 호출해 가능하다.

라이브러리 스크립트내에#Include(을)를 기술했을 경우, 패스의 기준 폴더는 그 라이브러리 스크립트가 있는 폴더가 된다.

ahk2exe.exe그리고 컴파일 하는 경우, 사용되고 있는 라이브러리 스크립트도 읽어들여 컴파일 된다. 이 때,ahk2exe.exe(은)는,AutoHotkey.exe하지만 있는 폴더내의 어떠한 폴더(통상은 「Compiler」)에 놓여져 있을 필요가 있다.

함수에 의한 스크립트의 모듈화

함수의 정의만을 쓴 스크립트를 「#Include」지령으로 읽어들여 사용하도록(듯이) 하는 것으로, 스크립트의 보수성을 향상 당한다.
다른 사람이 만든 스크립트를 자신의 스크립트에 짜넣고 싶은 경우 등에, 변수명의 중복을 신경쓰지 않아도 되므로 편리하다.

편입 함수

AutoHotkey에는, 미리 정의된 편입 함수가 준비되어 있다.
이것들은, 보통 함수와 같이 사용할 수 있다.
정의되고 있는 편입 함수에 대해서는,커멘드 레퍼런스(을)를 참조.

편입 함수는, 같은 이름의 함수를 정의하는 것으로 덧쓰기할 수 있다.

AutoHotKey(오토핫키) 설명서 Expression

Posted by 발전소장
2014. 8. 13. 15:54 AutoHotKey

개요

x:=(a+b)*10
if(x>1000){
    func(x+y,1)
}

연산자나함수호출해, 「()」 등을 조합하고, 복잡한 처리를 실시할 수 있다.
식의 결과는변수에 대입하거나분기의 조건에 사용할 수 있다.
단지 함수의 실행만을 실시하는 일도 가능.

또, 일부의 커멘드에 준비되어 있는 수치를 단독으로 지정하는 타입의 인수에서는, 식에서 값을 지정할 수도 있다.
그 이외의 인수에서도, 「% a+b」(와)과 같이 인수의 최초로 「%」라고 공백 문자를 적으면, 식을 지정할 수 있다.

getSomeValue()>0 or die()

상기와 같이, 「or」연산자가 좌변이 가짜 때만 우변의 평가를 실시하는 것 등을 이용하면, 「함수의 결과가0보다 크지 않으면 다른 함수를 실행」이라고 하는 처리를 식만으로 기술할 수도 있다.
다만, 아래와 같은 대입식이나 함수 호출해 이외로 시작되는 식은, 부정한 행으로 간주해져 버린다.

0<(x:=getSomeValue()) or die()

변수

각종 커멘드의 인수로 사용하는 경우와 달리, 식중에서 변수를 사용하는 경우는, 「%」(으)로 사이에 두지 않고 그대로 변수명을 쓰면 좋다.

아래와 같이, 식중에 「%」에서는씨로 변수명을 쓰면, 그 내용이 전개된 다음, 변수명으로서 다루어진다.
전후의 변수명으로서 타당한 문자와 아울러 변수명으로서 다루어진다.

Var1:=100,Var2:=10,Index:=1,VarName:="Var2"
MsgBox,% Var%Index%+%VarName%
a:=1,b:=2,c:=3,xxx1xxx23xxx:=10000
MsgBox,% xxx%a%xxx%b%%c%xxx

변수내의 문자열을 전개한 결과, 변수명으로서 올바르지 않은 문자열이 되어 버리는 경우는, 에러가 된다.

문자열

showmessage("He said ""hello""")

문자열은, 「"」(으)로 사이에 둔다.
하늘의 문자열을 나타내려면 , 「""」라고2개 계속하고 쓰면 좋다.
문자열중에 「"」(을)를 포함하고 싶은 경우, 「"」대신에 「""」라고2개 계속하고 쓴다.

text:=
MsgBox,% text

식의 내용이 하늘의 경우, 하늘의 문자열로 간주해진다.

수치

SetFormat,FLOAT,0.1
MsgBox,% 0.1+0.2
MsgBox,% 10/3
MsgBox,% 10/3 + 10/3 + 10/3

산술 연산자의 어느 쪽인지가 소수치였던 경우, 결과는 소수치가 된다.
또, 연산 결과가 소수가 되는 경우도, 자동적으로 소수치가 된다.

산술 연산의 결과가 소수의 경우, 계산 도중은 부동 소수점치로 보관 유지되어 최종적으로SetFormat커멘드로 지정된 형식에서 변수에 격납된다.

「1/0」 「x+*y」등과 같이, 정상적으로 처리할 수 없는 연산은, 하늘의 문자열로서 다루어진다.

진위치

if()(이)나 「!」 「NOT」 「AND(&&)」 「OR(||)」등의 논리 연산자에서는, 피연산자가 되는 식이 진위치로서 다루어진다.

「<」 「>」 「<=」 「>=」 「=」 「==」 「<>」 「!=」(와)과 같은 비교 연산자의 연산 결과는, 조건에 일치했을 경우진, 일치하지 않았던 경우가짜로 간주해진다.
수치는, 「0.0」(이)나 「0」(이)가 가짜, 그 이외는 진으로 간주해진다.
하늘의 문자열은 가짜,1문자 이상의 문자열은 진으로 간주해진다.

비교 연산자나 논리 연산자의 결과는, 진정한 경우는 「1」, 가짜 경우는 「0」(이)가 된다.

진을 나타내는 「true」, 가짜를 나타내는 「false」라고 하는 편입 변수가 준비되어 있다.

논리 연산의 생략

식중에서 「and」(이)나 「or」의 연산으로 연결된 논리식을 실행하는 경우, 왼쪽에서 실행해, 대답이 확정한 시점에서 평가를 종료한다.
예를 들어, 「a or b」에서는, 「a」(이)가true의 경우, 식 전체가true(이)가 되는 것은 분명해서 「b」의 평가는 행해지지 않는다.
같이 「a and b」에서는, 「a」(이)가false의 경우, 식 전체가false(이)가 되는 것이 분명해서 「b」의 평가는 행해지지 않는다.
식중의 함수 호출은 평가시에 실행되므로, 「a or B()」(와)과 같은 식에서는, 「B()」(이)가 실행되지 않는 경우가 있다.

연산자

식중에서 사용할 수 있는 연산자에는, 이하의 것이 있다.
자세한 것은 링크처의 개별 설명을 참조.

문자열 연산자

.(문자열 연결)

산술 연산자

-(부호 반전), +(가산), -(감산), *(곱셈), /(제산), //(결론 짓지 않는 제산), **(나무승), ++/--

비트 연산자

~(비트 반전), |(비트 논리합), &(비트 논리적), ^(비트 배타적 논리합), >>(논리 오른쪽 시프트), <<(왼쪽 시프트)

논리 연산자

!(논리 부정), ||(논리합), ||(논리적)

비교 연산자

>(대든지), <(소든지), >=(이상), <=(이하), =(대문자 소문자 무시의 등치), ==(등치), !=(비등치)

주소 연산자

&(주소), *(주소에 격납된 값)

그 외

각종 대입 연산자, ?:(조건), ,(콤마 단락으로 복수의 식을 평가)

AutoHotKey(오토핫키) 설명서 Example

Posted by 발전소장
2014. 8. 13. 15:35 AutoHotKey

사용예

여기에서는,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%

#이하약어

AutoHotKey(오토핫키) 설명서 Introduction

Posted by 발전소장
2014. 8. 13. 15:09 AutoHotKey

인트러덕션

여기에서는,AutoHotkey의 특징과 기능에 대해 소개한다.

스크립트 엔진

AutoHotkey그럼, 동작 설정을 스크립트로서 기술한다.
hot key에 동작을 할당하는 경우도, 단지 어떠한 처리를 실시하는 경우도, 텍스트 문자 편집기로 처리 내용을 기술해 실행하는 것만으로 좋다.

변수에 값을 격납해 사용하거나 조건 분기나 반복해, 써브루틴 호출등의 커멘드에 의해, 복잡한 처리를 실시하게 하는 일도 가능.

스크립트의 상세한 것에 대하여는,스크립트의 항을 참조.
또, 사용할 수 있는 커멘드에 대해서는레퍼런스(을)를 참조.

EXE파일화

ahk2exe.exe(을)를 사용하는 것으로, 스크립트를 짜넣었다EXE파일을 작성할 수 있다.
이것에 의해,AutoHotkey하지만 인스톨 되어 있지 않은 환경에서도, 작성한 스크립트를 사용하기 쉬워지고 있다.

hot key 할당

스크립트를 상주시키고, 특정의 키가 밀렸을 때에 임의의 처리를 실시하게 할 수 있다.
「Ctrl+F1」(와)과 같은 키의 편성에도 할당할 수 있다.
또, 키보드 훅을 이용하는 것으로써, 「Win+E」(와)과 같은Windows하지만 미리 사용하고 있는 hot key를 덧쓰기해 버릴 수도 있다.

키와 동작의 대응은, 미리 스크립트에 기술하는 것 외에Hotkey커멘드로 실행중에 할당/해제를 실시할 수도 있다.
또,Suspend키로 일시적으로 무효화할 수도 있다.

또,#IfWinActive지령등에 의해, 윈도우의 종류에 따라 다른 처리를 할당하거나 하는 일도 가능.

상세한 것에 대하여는hot key의 항을 참조.

마우스, 죠이스틱 대응

hot key에는, 다기능 키보드의 특수 키등을 포함해 대부분의 키를 사용할 수 있다.
또한, 마우스의 버튼(우, 왼쪽, 휠 버튼, 확장 버튼1,2,휠의 상하 회전)(이)나 죠이스틱의 각 버튼에도, 키보드와 같게 기능의 할당을 실시할 수 있다.

사용할 수 있는 키명의 일람에 대해서는,키 리스트의 항을 참조.

덧붙여 죠이스틱의 방향 키에의 할당 하행 없지만,GetKeyState커멘드로 상태를 취득할 수 있다.
방향 키는, 아날로그로6축까지 대응하고 있다.

키보드/보탄리맵

키가 밀렸을 때에 다른 키를 누른 것과 같은 동작으로 하는 리맵은, 특별한 서식에서 간단하게 기술할 수 있다.
자세한 것은리맵의 항을 참조.

핫 스트링

키보드로 특정의 문자열이 타입 되었을 때에 임의의 처리를 실시하게 하는 「핫 스트링」이라고 하는 기능도 이용할 수 있다.
입력한 문자열을 삭제해 다른 문자열을 다시 놓는 자동 치환을 실시하게 하는 일도 가능.
자세한 것은핫 스트링의 항을 참조.

조작 자동화 기능

키보드나 마우스의 조작을 자동으로 가거나 윈도우 상태를 변화시키거나 하는 기능이 준비되어 있다.
이러한 기능은, hot key에 할당해 조작성의 개선에 사용해도 좋고, 귀찮은 작업을 자동화하는 스크립트의 작성에도 도움이 된다.

키보드·마우스의 조작

Send커멘드로 키보드 조작을 발생시킬 수 있다.
일련의 키 입력을 정리해 송신하거나 키를 눌러 내린 채로 하거나 하는 일도 가능.

Click커멘드등에서는, 마우스 조작을 발생 당한다.

그 외의 키보드 관련 커멘드에 대해서는키보드 관련 커멘드의 일람을, 마우스 관련 커멘드에 대해서는마우스 관련 커멘드의 일람을 참조.

윈도우, 컨트롤의 조작

윈도우를 닫거나 이동하는 등, 여러가지 윈도우 조작 커멘드가 준비되어 있다.
또, 윈도우상의 버튼을 누르거나 하는 컨트롤 조작 커멘드도 이용할 수 있다.
또한,SendMessage커멘드를 이용하면, 윈도우 메세지를 송신해 여러가지 조작을 실시할 수 있다.

WinGet커멘드등에서는 윈도우의 각종 정보를 취득할 수 있는 것 외에IfWinActive커멘드등에서 윈도우 상태에 따라 처리를 분기 시키는 일도 가능.

그 외의 윈도우 관련 커멘드에 대해서는,윈도우 관련 커멘드의 일람을 참조.

상주 기능

hot key를 할당하는 것 외에도, 상주 유틸리티를 작성하는데 유용한 기능이 준비되어 있다.

타이머

SetTimer커멘드에 의해, 정기적으로 임의의 처리를 실행시킬 수 있다.

또,OS기동시부터의 시간이 격납된다A_TickCount(이)나 조작을 실시하지 않았던 시간을 격납한다A_TimeIdle등의 편입 변수를 이용해 시간 경과를 알 수도 있다.

task tray 아이콘

AutoHotkey의 스크립트가 실행되면, task tray에 아이콘이 표시된다.
아이콘 화상이나 오른쪽 클릭 메뉴, 더블 클릭 했을 때의 처리 등은Menu커멘드로 변경할 수 있다.
벌룬 메세지를 표시한다TrayTip커멘드도 있다.

다채로운 커멘드

프로그램의 실행, 프로세스 조작

Run/RunWait커멘드로 임의의 프로그램을 기동할 수 있다.
RunWait커멘드에서는, 프로그램이 종료할 때까지 대기할 수 있다.

실행중의 다른 프로세스는,Process커멘드로 검출하거나 강제 종료나 우선도의 변경등의 조작을 실시할 수 있다.

파일 조작

파일의 카피나 삭제등의 조작을 실시하거나 사이즈나 속성등을 취득하거나 하는 커멘드가 준비되어 있다.
와일드 카드나 상대 패스를 사용할 수 있으므로, 대상 파일의 지정이 편하게 할 수 있다.

또, 텍스트 파일의 읽고 쓰기도 가능
지정한 파일명 패턴에 일치하는 파일에 대해 같은 처리를 반복해 실시한다파일Loop(이)나, 텍스트 파일을1행씩 읽어들이면서 같은 처리를 반복한다Loop,READ등의 기능도 있다.
자세한 것은파일 관련 커멘드의 일람을 참조.

클립보드 처리

클립보드에 격납된 문자열은Clipboard변수로서 읽어들일 수 있다.
또,Clipboard변수에 대입해 클립보드의 내용을 변경할 수도 있다.
OnClipboardChange그렇다고 하는 라벨을 기술해 두면, 클립보드의 내용이 변경되었을 때에 임의의 처리가 실행되도록(듯이) 할 수도 있다.

자세한 것은클립보드의 항을 참조.

ini파일, 레지스트리, 환경 변수의 취급

Ini파일의 읽고 쓰기를 실시하는 커멘드군,레지스트리의 읽고 쓰기를 실시하는 커멘드군,환경 변수의 정보를 취득·설정하는 커멘드군도 준비되어 있다.
EnvSet커멘드로 설정된 환경 변수는,Run커멘드로 기동한 프로세스에 인계된다.

Windows슛다운

Shutdown커멘드에 의해,Windows(을)를 종료시키거나 재기동시키거나 할 수 있다.

덧붙여OnExit커멘드를 사용하면,Windows하지만 슛다운 되려고 하고 있을 때에 임의의 처리가 실행되도록(듯이) 할 수도 있다.

화면상의 피크셀색이나 화상의 검출

PixelGetColor커멘드나PixelSearch커멘드로 화면상의 피크셀의 색을 판별하거나 ImageSearch커멘드로 특정의 화상에 일치하는 부분이 있는지를 검출하거나 할 수 있다.
이러한 기능은, 게임등과 같이 다른 방법으로 상태를 취득할 수 없는 어플리케이션을 자동 조작하고 싶을 때 등에 도움이 된다.

유저 정의 함수

커멘드를 새롭게 정의하는 것은 할 수 없지만,함수(은)는 자유롭게 정의할 수 있다.
함수는, 커멘드와 같이 그 자리에서 단지 실행하는 일도,중(안)에서 사용할 수도 있다.

DLL호출

DLL하지만 제공하는 함수를 호출한다DllCall()그렇다고 하는 함수가 준비되어 있다.
Windows에 표준으로 포함된다DLL(이)나, 공개되고 있는 라이브러리등을 이용하는 것으로,AutoHotkey의 커멘드만으로는 불가능한 기능도 실현될 수 있는 경우가 있다.

GUI기능

정보를 표시하거나 입력을 받아들이거나하기 위한GUI도 간단하게 표시할 수 있다.
준비되어 있는 커멘드에 대해서는,GUI관련 커멘드의 일람을 참조.

다이얼로그등의 표시

MsgBox커멘드에서는, 메세지나 확인의 다이얼로그를 표시할 수 있다.
텍스트 입력을 요구하는 다이얼로그를 표시한다InputBox커멘드, 파일이나 폴더를 선택하는 다이얼로그를 표시한다FileSelectFile,FileSelectFolder커멘드 등도 있다.

progress bar를 표시한다Progress커멘드, 툴 팁 텍스트를 표시한다Tooltip커멘드등에서도 정보를 표시할 수 있다.

Menu커멘드에서는 임의의 pop-up menu를 작성해 표시할 수 있다.
각 메뉴 항목에 임의의 처리를 할당할 수 있다.

GUI폼 작성

Gui커멘드에서는, 윈도우를 작성해 자유롭게 컨트롤을 배치할 수 있다.
윈도우나 컨트롤의 사이즈·위치 등은, 지정하지 않으면 자동적으로 결정되므로, 적은 기술로 실용적인GUI하지만 작성할 수 있다.
버튼이 밀리거나 입력 내용이 변경되었을 때에 임의의 처리가 실행되도록(듯이) 설정할 수 있다.
컨트롤에 변수를 할당해 두면, 일괄해 입력 내용을 취득할 수 있다.

고도의GUI처리

타이틀 바 없음이나 반투명등의 윈도우 스타일을 가졌다GUI윈도우도 작성할 수 있다.
윈도우 스타일에 대해서는,윈도우 스타일의 항에 일람이 준비되어 있는 것 외에Web위에도 다수 해설이 있다.

OnMessage()함수에 의해,Gui윈도우가 특정의 메세지를 받아들였을 때에 임의의 함수가 불려 가도록(듯이) 설정할 수 있다.

AutoHotKey(오토핫키) 설명서 Index

Posted by 발전소장
2014. 8. 13. 14:15 AutoHotKey

AutoHotkey(을)를 유행시키는 페이지

AutoHotkey(은)는 hot key에의 기능의 할당 등 상주 소프트의 작성에 특화한 스크립트 엔진이다.
다채로운 커멘드가 준비되어 있어GUI(을)를 가진 프로그램의 작성도 가능.
GNU GENERAL PUBLIC LICENSE Version 2아래에서 배포되는 프리 소프트로,C++그리고 만들어져 있다.
공식 사이트(http://www.autohotkey.com/)에서, installer판과ZIP어카이브(archive)판의2종류가 배포되고 있다.installer를 실행하면, 스타트 메뉴, 신규 작성 메뉴, 관련지어로 변경이 더해진다.

당사이트에서는, 영어의 소프트이다AutoHotkey의 일본어 메뉴얼이나, 스크립트에 짜넣어 이용할 수 있는 모듈등을 공개하고 있다.

AutoHotkey해설

AutoHotkey안 오피셜 가이드
어떤 신문의 기획으로 만든 전자 북.몇개의 사용예를, 설명이나 screen shot 첨부로 소개.
인트러덕션
기능 소개
사용예
대표적인 사용 방법과 스크립트의 예
사용 방법
인스톨,AutoHotkey.exe의 사용 방법, 실행 파일로 변환하는 방법의 설명
Hotkeys
hot key 할당의 지정 방법
키 리스트
hot key 라벨이나 커멘드내에서 사용하는 키명의 일람
Remap
어느 키에 다른 키를 할당하는 기능의 해설
Hotstring
특정의 텍스트를 타이프 치면별의 텍스트로 옮겨지거나 스크립트가 실행 되거나 하는 기능의 해설
스크립트 사양
스크립트의 사양에 대한 설명
편입 변수
스크립트내에서 사용할 수 있는 편입 변수에 대해
스크립트중에서 사용하는 식에 대해
함수
식중등에서 사용하는 함수에 대해
정규 표현
RegExMatch()(이)나RegExReplace()등에서 사용하는 정규 표현에 대해
윈도우 지정의 방법
윈도우 관련 커멘드로의 윈도우의 지정 방법
그 외 해설
그 외의 사양·이용법의 설명
레퍼런스 (프레임 사용판)(알파벳순서)
커멘드, 함수, 연산자의 설명

그 외의 컨텐츠

My Scripts
관리인이 작성한 스크립트의 공개
Tools
AutoHotkey(으)로부터 호출해 사용하면 편리할 것 같은 툴의 소개

관리인에 대해

메인사이트:http://ahkplant.tistory.com