AutoHotKey(오토핫키) 설명서 =, := 대입 연산자

Posted by 발전소장
2014. 8. 13. 17:12 AutoHotKey/Commands

대입 연산자

변수에 식의 계산 결과를 대입

Var := Expression
Var op= Expression

Parameters

Var대입처의 변수명.「ArrayName%Index%」(와)과 같이, 변수의 참조를 포함하면, 변수의 내용을 전개한 변수명이 사용된다.
op 「+」 「-」 「*」 「/」 「//」 「.」 「|」 「&」 「^」 「>>」 「<<」의 어느 쪽인가의 연산자.
Expression식.식의 설명참조.

Remarks

「:=」에서는,Expression(을)를 평가한 결과의 값이Var그리고 지정한 변수에 대입된다.

var:=x+y+z

「+=」(이)나 「*=」(와)과 같은 형식에서는,Var그리고 지정한 변수와Expression(을)를op그리고 지정한 연산자로 연산한 결과가Var자신에게 대입된다.
상기의 예에서는,x의 값은11(이)가 된다.
대입식 전체의 값은, 대입 후의 변수의 값이 된다.

x:=1
MsgBox,% x+=1

대입 연산자가 연속하고 있는 경우, 제일 오른쪽의 것으로부터 순서에 계산된다.
아래와 같은 예에서는, 우선c에1하지만 다리 되어4(이)가 되어,b에c하지만 다리 되어6(이)가 되어,a에b하지만 더해져7(이)가 된다.

a:=1,b:=2,c:=3
a+=b+=c+=1
MsgBox,%a%,%b%,%c%

대입식 자체는, 대입처의 변수를 나타내는 것이라고 해도 다루어지기 위해, 그것을 더욱 대입식의 좌변에 사용하거나 「&」연산자로 주소를 참조하거나함수의ByRef부착 인수에 사용할 수도 있다.
아래와 같은 예에서는, 우선x에1하지만 가산해, 더욱2(을)를 걸어func()함수에 참조 인수로서 건네주어, 함수내에서10(을)를 가산한다.

func(ByRef arg){
    arg+=10
}
x:=1
func((x+=1)*=2)
MsgBox,% x

「+=」 「-=」 「*=」 「/=」(이)가 제일 왼쪽의 연산자였던 경우, 각각EnvAdd, EnvSub, EnvMult, EnvDiv커멘드의 별표기로 간주해지기 위해, 다른 경우와 다른 동작이 된다.
Var(이)나Expression하지만 수치로서 올바르지 않았던 경우, 「0」이다고 보인다.(통상은, 연산 결과가 하늘의 문자열이 된다)
「+=」 「-=」에서는,일자 시각의 연산이 가능하게 된다.
「/=」에서는,Var(와)과Expression하지만 모두 정수치의 경우, 결과의 소수점 이하를 잘라 버릴 수 있어 정수치가 되어 버린다.(통상의 「/」연산자는, 소수점 이하를 잘라 버리지 않는다)

Related

식의 설명, IF (식), SetEnv, EnvSet, EnvAdd, EnvSub, EnvMult, EnvDiv, If, 배열

Example(s)

Var := 3
Var := "literal string"
Var := Price * (1 - Discount/100)

Finished := not Done or A_Index > 100
if not Finished
{
	FileAppend, %NewText%`n, %TargetFile%
	return
}
else
	ExitApp

AutoHotKey(오토핫키) 설명서 && 연산자

Posted by 발전소장
2014. 8. 13. 17:08 AutoHotKey/Commands

&& 연산자(논리적)

2개의 식의 논리적의 진위치를 돌려주는 연산자

Expression1&&Expression2
Expression1 AND Expression2

Parameters

인수명설명
Expression1임의의 식
Expression2임의의 식

Remarks

Expression1(와)과Expression2의 언젠가 혹은 양쪽 모두가 가짜라면 결과는 가짜에, 양쪽 모두가 진이라면 결과는 실로 된다.

수치의 제로나 하늘의 문자열은 가짜(False)(으)로서 다루어져 그 이외는 진(True)(으)로서 다루어진다.
논리 연산의 결과는, 가짜(False)의 경우 「0」, 진(True)의 경우 「1」가 된다.

Related

, if(식), Var:=식

AutoHotKey(오토핫키) 설명서 & 연산자

Posted by 발전소장
2014. 8. 13. 17:07 AutoHotKey/Commands

& 연산자(주소)

변수의 내용이 격납된 메모리 영역의 주소를 얻는 연산자

&Var

Parameters

인수명설명
Var변수명

Related

, if(식), Var:=식

AutoHotKey(오토핫키) 설명서 + 연산자

Posted by 발전소장
2014. 8. 13. 17:05 AutoHotKey/Commands

+ 연산자(가산)

2개의 식의 화를 돌려주는 연산자

Expression1-Expression2

Parameters

인수명설명
Expression1임의의 식
Expression2임의의 식

Related

, if(식), Var:=식

AutoHotKey(오토핫키) 설명서 Window

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

윈도우 지정의 방법

커멘드명의 머리에Win혹은Control(와)과 붙는 커멘드에는,WinTitle, WinText, ExcludeTitle, ExcludeText그렇다고 하는 인수를 취하는 것이 많다.
이러한 지정 방법은, 대개 모든 커멘드로 같아서, 여기서 정리해 설명한다.

WinTitle
윈도우의 타이틀 바등의 타이틀을 지정한다.
대문자 소문자는 구별된다.
그 밖에, 이후에 설명하는 지정이 가능.
대체로의 경우, 나머지의3인수는 생략 된다.
WinText
윈도우내에 포함되는 텍스트로 좁힌다
ExcludeTitle
무시하는 윈도우의 타이틀을 지정한다
ExcludeText
무시하는 윈도우의 텍스트를 지정한다

타이틀이나 텍스트의 체크는, 디폴트에서는 전방 일치가 되어 있다.
SetTitleMatchMode,2」라고 하는 커멘드로 부분 일치가 된다.
SetTitleMatchMode,3」(으)로 완전 일치.
SetTitleMatchMode,RegEx」에서는, 정규 표현에 의한 지정이 가능.

DetectHiddenWindows,On」(을)를 실시하지 않으면, 비표시의 윈도우는 무시된다.
다만, 후술의LastFoundWindow하지만AutoHotkey의Gui윈도우의 경우,DetectHiddenWindows하지만Off그렇지만 검출된다.

DetectHiddenText,Off」(을)를 실시하면, 비표시의 텍스트는 무시된다.

Control계 커멘드의 「Control」인수

GUI컨트롤을 조작한다Control계 커멘드의 인수에는, 앞의4인수의 전에 「Control」라고 하는 인수를 취하는 것이 많다.
이 인수에는,ClassNN(클래스명과 인스턴스 번호)혹은, 버튼등의 텍스트에 포함되는 문자열을 지정한다.
생략 하면, 제일 전의 컨트롤이 사용된다.

Control계 커멘드로의 윈도우 핸들의 직접 지정

「Control」인수가 있는 컨트롤 조작계 커멘드에서는,WinTitle에 「ahk_id %controlHWND%」라고 하도록(듯이) 컨트롤의 윈도우 핸들을 지정해,Control인수를 생략 하는 것으로, 윈도우 핸들로 지정해 컨트롤을 조작할 수 있다.
컨트롤의 윈도우 핸들은,MouseGetPos,WinGet,ControlGet커멘드나,DllCall()함수에 의한 각종API의 호출에 의해서 취득할 수 있다.

ClassNN(을)를 이용한 컨트롤의 지정에서는, 클래스명이 「SysListView」인 컨트롤과 「SysListView32」인 컨트롤이 존재해, 「SysListView321」라고 한다ClassNN하지만 지정되었을 때, 「1번째의SysListView32」(을)를 지정했는지 「321번째의SysListView」(을)를 지정했는지를 분별할 수 없다.
이러한 문제가 있는 것부터,ClassNN보다 윈도우 핸들의 직접 지정을 사용하는 것이 바람직하다.
ClassNN보다 윈도우 핸들의 직접 지정이,2배정도 고속으로 동작한다.

윈도우 클래스의 지정

WinTitle(을)를 「ahk_class classname」(와)과 같이 지정하면, 윈도우 클래스가classname의 윈도우를 지정할 수 있다.
윈도우 클래스는,WinGetClass그리고 취득할 수 있는 것 외에 부속의 툴로 조사하는 일도 가능.

윈도우 핸들의 지정

WinTitle(을)를 「ahk_id 0x01234567」(와)과 같이 지정하면, 윈도우 핸들이0x01234567의 윈도우를 지정할 수 있다.
윈도우 핸들은,WinGet커멘드로 취득한 것을 사용할 수 있다.

윈도우 소유 프로세스로의 지정

WinTitle(을)를 「ahk_pid %pid%」(와)과 같이 지정하면,WinGet,Run,Process커멘드로 취득한 프로세스ID(PID)의 프로세스가 소유하는 윈도우를 대상으로 할 수 있다.

윈도우 그룹의 지정

WinTitle(을)를 「ahk_group GroupName」(와)과 같이 지정하면,GroupAdd커멘드로 작성한 윈도우 그룹에 대해서 일괄하고 조작을 실시할 수 있다.
WinMinimize,WinMaximize,WinRestore,WinHide,WinShow,WinClose,WinKill그럼, 모든 윈도우가 조작된다.
그 이외의 커멘드에서는, 가장 앞에 있는 윈도우가 대상이 된다.

복수의 조건의 동시 지정

「%title% ahk_class %class% ahk_pid %pid%」(와)과 같이 반각 스페이스 혹은Tab문자로 단락지어 조건을 열거하는 것으로, 윈도우 타이틀이나ahk_class,ahk_pid,ahk_group의 조건을 조합해 지정할 수 있다.
윈도우 타이틀의 조건을 지정하는 경우는, 반드시 제일 최초로 기술한다.
스페이스가 두 개 이상 연속하고 있으면, 마지막 하나 이외는 직전의 조건의 일부이다고 보인다.

액티브 윈도우의 지정

WinTitle(을)를 「A」라고 지정해, 나머지의 인수를 생략 하면, 액티브한 윈도우를 지정할 수 있다.
만약 액티브 윈도우가 비표시로,DetectHiddenWindows하지만Off(이었)였던 경우, 일치하는 윈도우 없음이라는 것이 된다.

복수 윈도우가 매치했을 경우

WinTitle,WinText인수의 지정에 매치하는 윈도우가 다수 있었을 경우, 일번수전의 윈도우가 대상이 된다.

Last Found Window

IfWinExist, IfWinNotExist, IfWinActive, IfWinNotActive, WinWaitActive, WinWaitNotActive, WinWait의 커멘드로 검출된 윈도우는,Last Found Window(으)로서 기록된다.
WinTitle, WinText, ExcludeTitle, ExcludeText(을)를 모두 생략 했을 경우, 이 윈도우가 대상이 된다.
이것에 의해, 몇의 것도 윈도우 조작 커멘드로 같은 지정을 반복할 필요가 없어진다.

이 정보는스렛드마다 보관 유지되어 세치기가 발생해도 써 바뀔 것은 없다.

마우스 커서아래의 윈도우·컨트롤

MouseGetPos(을)를 사용하면, 마우스아래의 윈도우 핸들과 컨트롤의ClassNN(을)를 취득할 수 있다.

윈도우 클래스명의 조사

윈도우 클래스나GUI컨트롤의ClassNN(을)를 조사하고 싶은 경우,AutoHotkey동고의AU3_Spy.exe(을)를 사용한다.
기동해 조사하고 싶은 윈도우를 액티브하게 하면 각종 정보가 표시된다.
GUI컨트롤의ClassNN(을)를 조사하고 싶은 경우는, 해당 컨트롤 위에 마우스 커서를 이동한다.

>>>>>>>>>>>>( Window Title )<<<<<<<<<<<<<
데스크탑
ahk_class ExploreWClass

>>>>>>>>>>>( Mouse Position )<<<<<<<<<<<<
On Screen:	x: 691	y: 545  (less often used)
In Window:	x: 307	y: 198

>>>>>>>>>>>>>( Pixel Color )<<<<<<<<<<<<<
10524816

>>>>>>>>>>>( Window Position )<<<<<<<<<<<
left: 384     top: 347     width: 800     height: 600

>>>>>>>>( Last Control Under Mouse )<<<<<<<
SysListView321

>>>>>>>>>( Status Bar Text )<<<<<<<<
(1): 
(2): 11.7 KB
(3): 마이 컴퓨터

>>>>>>>>>>>( Visible Window Text )<<<<<<<<<
FolderView

>>>>>>>>>>( Hidden Window Text )<<<<<<<<<

>>>>>>>>>>>( TitleMatchMode=slow Visible Text )<<<<<<<<<
데스크탑
데스크탑

>>>>>>>>>>( TitleMatchMode=slow Hidden Text )<<<<<<<<<

AU3_Spy.exe(을)를 기동해 다른 윈도우를 액티브하게 하면, 상기와 같은 내용이 표시된다.
3행목이 윈도우 클래스,16행목이 마우스아래의 컨트롤의ClassNN.
Shift+Alt+Tab그리고AU3_Spy.exe의 윈도우로 전환하면,ClassNN등의 정보가 고정되므로 범위 선택으로 카피할 수 있다.

Example

IfWinExist, Untitled - Notepad
{
	WinActivate  ; Automatically uses the window found above.
	WinMaximize  ; same
	Send, Some text.{Enter}
	return
}


IfWinNotExist, Calculator
	return
else
{
	WinActivate  ; The above "IfWinNotExist" also set the "last found" window for us.
	WinMove, 40, 40  ; Move it to a new position.
	return
}


; Make a hotkey to maximize a window.
; Specify just "A" to make it operate on the active window:
^Up::WinMaximize, A

AutoHotKey(오토핫키) 설명서 Variables

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

편입 변수

특수 문자

A_Space 단독의 반각 스페이스를 나타내는데 사용한다.AutoTrim도 참조.
A_Tab 단독의Tab문자를 나타내는데 사용한다.AutoTrim도 참조.
False 「0」.
「가짜」를 나타낼 때 사용한다.
True 「1」.
「진」을 나타낼 때 사용한다.

스크립트 정보

A_AhkPath 현재의 스크립트를 실행하고 있는 실행 파일(AutoHotkey.exe)의 풀 패스.

컴파일 된 스크립트에서는, 레지스트리에 기록된 인스톨처 디렉토리내의AutoHotkey.exe의 패스가 된다.
인스톨처를 취득할 수 없는 경우는, 공문자열이 된다.
A_AhkVersion AutoHotkey의 버젼을 「1.0.22」등의 문자열로 격납한다.
실행 파일화 된 스크립트의 경우, 컴파일을 실시했다AutoHotkey의 버젼이 된다.
「if A_AhkVersion >= 1.0.25.07」(와)과 같이 하고, 버젼 번호의 대소를 비교하는 것이 가능.
A_IsCompiled 실행 파일화 된 스크립트의 경우 「1」(이)가 된다.
그 이외의 경우는 비운다.
환경 변수명(PATH등) AutoHotkey실행시의 환경 변수는 보통 변수와 같이 액세스 할 수 있다.
1, 2, 3, ……및 0 커멘드 라인 인수.
%0%에는 인수의 수가 격납된다.
인수의 건네주는 방법 등은스크립트의 항을 참조.
A_WorkingDir 작업 디렉토리.
파일의 읽고 쓰기등에서 디폴트의 디렉토리가 된다.
SetWorkingDir커멘드로 변경 가능.
마지막 「\」(은)는 제외해진다.다만, 드라이브 루트만은 예외.
A_ScriptName 스크립트의 파일명.
실행 파일화되고 있는 경우, 확장자(extension)가 「.exe」(이)가 된다.
IfInString, A_ScriptName, .exe그리고, 실행 파일화 되고 있는지를 판별할 수 있다.
A_ScriptDir 스크립트가 있는 디렉토리 패스.
마지막 「\」(은)는 제외해진다.
A_ScriptFullPath 스크립트의 풀 패스
A_ThisLabel 현재의 스렛드로 마지막에 불려 간 라벨명.
타이머, GUI이벤트, 메뉴, hot key, 핫 스트링, OnClipboardChange, OnExit그리고 실행된 스렛드에서는, 할당할 수 있었던 라벨 명화 초기치가 된다.
Gosub/Return(이)나Goto그리고 점프 하면 갱신된다.
A_ThisFunc 실행중의 함수명.
불특정 다수의 함수로부터Gosub그리고 불려 갈 가능성이 있는 써브루틴내에서, 호출원의 함수를 알 수 있다.
A_LineNumber 스크립트의 현재 실행중의 행 번호.
ListLines커멘드로 표시되는 행 번호와 같다.
A_LineFile 현재 실행중의 부분이 쓰여진 스크립트 파일의 풀 패스.
#Include(을)를 사용하고 있지 않는 경우는, 항상A_ScriptFullPath(와)과 같게 된다.
A_ExitReason OnExit그리고 지정된 써브루틴이 종료전에 불려 갔을 때, 종료 이유가 격납된다.
자세한 것은OnExit참조.

반복 처리 관련

A_Index 루프의 실행 회수.
1번째는1. 자세한 것은Loop의 항참조.
A_LoopFileName, etc. file-loop그리고 사용.
A_LoopRegName, etc. registry-loop그리고 사용.
A_LoopReadLine file-read loop그리고 사용.읽어들인 행의 내용.
A_LoopField 문자열 해석 루프그리고 사용.필드 내용.

일자 시각

FormatTime커멘드를 사용하는 것으로, 보다 많은 형식을 사용할 수 있다.

A_YYYY,A_Year 현재 일시의 해를 나타낸다4자리수의 숫자(...2004...)
A_MM,A_Mon 달을 나타낸다2자리수의 숫자(01...12)
A_DD,A_MDay 일을 나타낸다2자리수의 숫자(01...31)
A_MMMM 달의 명칭(...July...)
A_MMM 달을 나타낸다3문자의 생략명(...Jul...)
A_DDDD 요일을 나타내는 문자열(Sunday...)
A_DDD 요일을 나타낸다3문자의 생략명(Sun...)
A_WDay 요일을 나타낸다1문자의 숫자(1...7)1하지만 일요일
A_YDay 1해 중(안)에서 며칠눈인가(1...366)
제로 서플라이 되지 않기 때문에,001...099...366(와)과 같은 형식으로 하고 싶은 경우는, 「FormatTime, OutputVar, , YDay0」라고 한다.
A_YWeek 서기년과 주번호를 연결했다ISO8601형식의 문자열(...200453...)
1월1일을 포함한 주가4일 이상 있는 경우, 그 주가 제1주에, 그렇지 않은 경우는 다음의 주가 제1주가 된다.
A_YDay 1월1일부터의 날짜를 나타낸다1~3자리수의 수(1...366)
A_Hour 시간을 나타낸다2자리수의 숫자(00...23)
A_Min 분을 나타낸다2자리수의 숫자(00...59)
A_Sec 초를 나타낸다2자리수의 숫자(00...59)
A_MSec 밀리 세컨드를 나타낸다3자리수의 숫자(000...999).
A_Now 현재 시각을YYYYMMDDHH24MISS의 서식에서 나타낸 것
A_NowUTC UTC시각을YYYYMMDDHH24MISS의 서식에서 나타낸 것
A_TickCount OS하지만 기동하고 나서의 경과시간(밀리 세컨드)

스크립트 설정

A_IsSuspended 스크립트가Suspend커멘드로 중지 되고 있는 경우는 「1」(이)가 된다.그 이외의 경우는 「0」.
A_BatchLines SetBatchLines그리고 설정한 처리 속도.
A_TitleMatchMode SetTitleMatchMode그리고 지정한 윈도우 타이틀의 매치 방식.(1/2/3)
A_TitleMatchModeSpeed SetTitleMatchMode그리고 지정한 윈도우 타이틀 매치의 종류.(fast/slow)
A_DetectHiddenWindows DetectHiddenWindows그리고 지정한, 비표시 윈도우의 검출의 유무.(On/Off)
A_DetectHiddenText DetectHiddenText그리고 지정한 은폐 텍스트 검출의 유무(On/Off)
A_AutoTrim AutoTrim그리고 지정한, 인수의 전후의 공백을 자동 제거할지.(On/Off)
A_StringCaseSense StringCaseSense그리고 지정한, 대문자 소문자 구별의 유무.(On/Off/Locale)
A_FormatInteger SetFormat그리고 지정한 정수치의 서식(H/D)
A_FormatFloat SetFormat그리고 지정한 소수치의 서식
A_KeyDelay SetKeyDelay그리고 지정한, 키 입력의 간격.(밀리 세컨드)
A_WinDelay SetWinDelay그리고 지정한, 윈도우 조작의 간격.(밀리 세컨드)
A_ControlDelay SetControlDelay그리고 지정했다GUI컨트롤 조작의 간격.(밀리 세컨드)
A_MouseDelay SetMouseDelay그리고 지정한, 마우스 조작의 간격.(밀리 세컨드)
A_DefaultMouseSpeed SetDefaultMouseSpeed그리고 지정한, 마우스의 이동 속도의 디폴트.(0...100)
A_IconHidden 트레이 아이콘이 비표시가 되어 있는지 어떤지.(0=표시,1=비표시)
#NoTrayIcon지령이나Menu커멘드로 아이콘비표시로 할 수 있다.
A_IconTip Menu, Tray, Tip somestring」(으)로 트레이 아이콘의 툴 팁을 지정했을 때, 그 내용
A_IconFile Menu, tray, icon iconfilename.ico」(으)로 트레이 아이콘을 지정했을 경우, 그 파일명
A_IconNumber 아이콘 파일에 아이콘이 포함되어 있으면, 그 수

대기 경과시간

A_TimeIdle 마지막에 어떠한 입력이 있고 나서의 경과시간을 밀리 세컨드로 격납.(NT계 전용)
PC하지만 방치되어 있을 때 액션을 일으키는데 사용할 수 있다.
어떠한 프로그램이 생성한 입력 이벤트에서도 리셋트 되어 버린다.
A_TimeIdlePhysical A_TimeIdle(와)과 같지만,키보드Hook(이)나마우스Hook하지만 사용되고 있으면, 프로그램이 발생시킨 입력 이벤트를 무시할 수 있다.

hot key·GUI관련

A_ThisMenu A_ThisMenuItem의 아이템이 들어가 있던 메뉴명을 격납.
A_ThisMenuItem 마지막에 선택된 메뉴 아이템명이 격납된다.
자세한 것은,Menu커멘드 참조.
복수의 메뉴 아이템에 하나의 써브루틴을 할당하는 경우 등에 사용.
A_ThisMenuItemPos A_ThisMenuItem의 아이템이A_ThisMenu안에서 몇번째에 있었는지를 격납한다.
맨 위는 「1」.세퍼레이터도 카운트 된다.A_ThisMenu(이)나A_ThisMenuItem하지만 삭제되었을 경우, 이 변수는 비운다.
A_ThisHotkey 마지막에 실행된 hot key의 라벨명이 격납된다.(Win+A(이)라면 「#a」)
hot key 써브루틴의 실행중에 다른 hot key가 끼어들어 오면, 이 값은 변경되어 버리기 때문에, 필요하면 써브루틴의 초의 분으로 다른 변수에 카피하는 것.
A_PriorHotkey 하나전의 hot key
A_TimeSinceThisHotkey A_ThisHotkey의 발생으로부터 경과한 시간(밀리 세컨드).A_ThisHotkey하지만 하늘이라면-1.
A_TimeSincePriorHotkey A_PriorHotkey의 발생으로부터 경과한 시간
A_EndChar 제일 최근의스크립트 실행형 핫 스트링(을)를 발동시킨 종료 키.
「*」옵션에 의해 종료 키가 불필요하게 되어 있었을 경우는, 공백이 된다.
A_GUI 현재의스렛드(을)를 호출했다GUI윈도우의 번호.
현재의 스렛드가GUI위의 이벤트로 불려 갔으므로 않는 경우, 비운다.
A_GuiControl 현재의스렛드(을)를 호출했다GUI컨트롤.
컨트롤에 「V」옵션으로 변수를 관련지을 수 있고 있는 경우, 그 변수명이 격납된다.변수를 관련지을 수 있지 않은 경우, 컨트롤의 텍스트가 최대63문자 격납된다.
이 변수에 격납된 값은,GuiControl커멘드의ControlID인수로 사용할 수 있다.
현재의 스렛드가GUI컨트롤의 조작 이벤트로 불려 갔으므로 않는 경우는 비운다.
A_GuiWidth GuiSize이벤트하지만 불려 갔을 때의 해당GUI윈도우의 가로폭.
현재의 스렛드가GuiSize이벤트 이외로 불려 갔을 경우는, 부정 혹은 미정도리가 된다.
A_GuiHeight GuiSize이벤트하지만 불려 갔을 때의 해당GUI윈도우의 높이.
A_GuiX 일부의GUI관련 이벤트로 마우스 커서의 횡좌표를 윈도우의 좌단으로부터의 상대 좌표로 격납한다
A_GuiY 일부의GUI관련 이벤트로 마우스 커서의 종좌표를 윈도우의 상단으로부터의 상대 좌표로 격납한다
A_GuiEvent 현재의스렛드하지만GUI목응인 조작에 의해서 불려 갔는지.
내용은 이하의 어떤 것인가
(공)
현재의 스렛드가GUI의 액션(으)로서 불려 간 것이 아닌 경우
Normal
컨트롤의 싱글 클릭이나 그 다른 키스트로크(keystroke)에 의해서 불려 갔을 경우.
도구모음 부하의 메뉴 아이템의 실행이나,GuiEscape,GuiClose이벤트로서 실행되었을 경우에서도, 이 값을 할당할 수 있다.
DoubleClick
더블 클릭의2번째의 클릭에 의해서 불려 갔을 때에 이 값을 할당할 수 있다.(1번째의 클릭에서는,Normal하지만 할당할 수 있었던 스렛드가 실행된다)
슬라이더의 조작을 나타내는 값
Slider컨트롤에 할당할 수 있었던 라벨이 실행되었을 경우, 어떠한 조작으로 값이 변경되었는지를 나타내는 값이 격납된다.
파일명
GuiDropFiles이벤트그리고 불려 갔을 경우, 파일명이 개행 단락으로 격납된다.
그 외
GUI컨트롤의 타입에 따라서는, 다른 값이 돌려주어지는 경우도 있다.「DoubleClick(이)가 아니면 통상의 실행」등의 판정을 실시하는 것은 추천 되지 않는다.
A_GuiControlEvent A_GuiEvent(와)과 같다
A_EventInfo 현재의 스렛드가 불려 간 이벤트에 관한 추가의 정보를 격납한다.
추가의 정보를 가지지 않는 이벤트에서는, 「0」(이)가 된다.

OS및 유저 정보

A_OSType Windows9x계라면 「WIN32_WINDOWS」,NT계라면 「WIN32_NT」.
A_OSVersion "WIN_VISTA", "WIN_XP", "WIN_2000", "WIN_NT4", "WIN_95", "WIN_98", "WIN_ME".
A_Language 시스템의 언어를 나타낸다4자리수의16진수치.
값과 언어의 대응은language table(을)를 참조.일본어는 「0411」.
A_ComputerName 현재의 컴퓨터의 네트워크상에서의 이름
A_UserName 로그인하고 있는 유저명
A_IsAdmin 유저가 관리자 권한을 가지고 있는 경우 「1」, 관리자 권한이 없는 경우 「0」.9x계에서는 항상 「1」.
ComSpec 콘솔 쉘(많은 경우 「cmd.exe」)의 풀 패스.
A_WinDir Windows디렉토리의 패스.(례:C:\Windows)
A_ProgramFiles
ProgramFiles
Program Files디렉토리의 패스.(례:C:\Program Files)
A_AppData Application Data폴더의 풀 패스.
A_AppDataCommon 전유저 공통의Application Data폴더의 풀 패스.
A_Temp 텐포라리포르다의 풀 패스.
A_Desktop 데스크탑 폴더의 풀 패스.
A_DesktopCommon AllUsers의 공통 데스크탑 폴더의 풀 패스.
A_StartMenu 스타트 메뉴 폴더의 풀 패스.
A_StartMenuCommon AllUsers의 공통 스타트 메뉴 폴더의 풀 패스.
A_Programs 스타트 메뉴의 「프로그램」폴더의 풀 패스.
A_ProgramsCommon AllUsers의 공통 스타트 메뉴의 「프로그램」폴더의 풀 패스.
A_Startup 스타트 업 폴더의 풀 패스.
A_StartupCommon AllUsers의 공통 스타트 업 폴더의 풀 패스.
A_MyDocuments My Documents폴더의 풀 패스.
이 변수만은, 드라이브의 루트가 설정되어 있을 때, 마지막 「\」(이)가 제외해져 「D:」(와)과 같이 된다.
A_ScreenWidth 화면의 가로폭.
멀티 모니터 환경에서의 제2모니터 이후나 데스크탑 전체의 치수를 얻으려면 ,SysGet커멘드를 사용한다.
A_ScreenHeight 화면의 높이
A_IPAddress1...A_IPAddress4 1번째로부터4번째의 네트워크 어댑터의IP주소

A_Cursor 현재의 마우스 커서의 종류.이하의 문자열의 어떤 것인가.
AppStarting, Arrow, Cross, Help, IBeam, Icon, No, Size, SizeAll, SizeNESW, SizeNS, SizeNWSE, SizeWE, UpArrow, Wait, Unknown.
Size??의??(은)는 방위를 나타낸다. 브라우저로 링크를 포인트 했을 때 등에 사용되는 손의 형태의 커서는,Unknown(으)로서 다루어진다.
A_CaretX caret(텍스트 입력 커서)의X좌표.
통상은 액티브 윈도우의 좌상으로부터의 좌표이지만, 「CoordMode,Caret,Screen」라고 하는 커멘드를 실행하면, 스크린상에서의 좌표가 된다.
caret가 없는 경우나 좌표를 취득할 수 없는 경우는 공백이 된다.
A_CaretY caret의Y좌표
Clipboard 클립보드의 텍스트.
Clipboard(을)를 참조.
ClipboardAll 클립보드의 전내용.
통상의 변수와는 취급이 크게 다르다.
Clipboard(을)를 참조.
ErrorLevel ErrorLevel참조.
A_LastError DllCall(이)나Run,RunWait의 실행 후에, 「GetLastError()」API하지만 돌려주는 에러 코드를 격납한다.

AutoHotKey(오토핫키) 설명서 Usage

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

사용 방법

인스톨

ZIP어카이브(archive)판은, 해동하는 것만으로 실행 가능하게 된다.
installer판은, 실행한다고 표시되는 화면에서 「Next>」 「I Agree」 「Next」 「Install」의 순서에 눌러 가면 인스톨 할 수 있다.

스크립트 파일이 관련지어

AutoHotkey(을)를 installer로 인스톨 하면, 확장자(extension) 「.ahk」의 파일에 관련지어를 해 확장자(extension) 「.ahk」의 스크립트 파일을 익스플로러로 더블 클릭 했을 때 등에AutoHotkey.exe그리고 실행되게 된다.
오른쪽 클릭 메뉴에는, 스크립트를 실행하는 「Run Script」외, 후술의ahk2.exe그리고 실행 파일화하는 「Compile Script」,notepad.exe그리고 스크립트 파일을 여는 「Edit Script」(이)가 추가된다.
또, installer의 「Choose Components」의 화면에서 「Enable drag & drop onto scripts」에 체크를 했을 경우, 스크립트 파일의 아이콘에 파일을 드러그&드롭 했을 때에, 스크립트 파일에 인수(%1%)(으)로서 보내지게 된다.

스크립트의 실행 파일화

ahk2exe.exe(을)를 사용하는 것으로, 스크립트를 실행 파일화하는 것이 가능.
실행 파일은UPX에 의한 압축이 베풀어진다.
역컴파일러도 공개되고 있지만, 패스워드로 암호화하면 역 컴파일을 막을 수 있다.
작성한 실행 파일의 배포는 자유.

컴파일 된 스크립트에서는 통상, task tray 메뉴로부터 메인 윈도우를 표시하는 것은 할 수 없다.
Menu,TRAY,MainWindow」(으)로 메인 윈도우를 표시 가능하게 할 수 있다.

스크립트측으로부터, 컴파일 된 상태로 실행되고 있는지 어떤지를 알려면 , 「A_IsCompiled」변수를 사용한다.「1」(이)라면 컴파일 되고 있다.

ahk2exe.exe의 커멘드 라인

Ahk2exe.exe /in <infile.ahk> [/out <outfile.exe>][/icon <iconfile.ico>][/pass <passphrase>]

Ahk2exe.exe(은)는 커멘드 라인으로부터 직접 컴파일을 실행하는 일도 가능.

컴파일 된 실행 파일의 커멘드 라인

CompiledScript.exe [/f] [/r] [/ErrorStdOut] [Script Parameters] 

컴파일 해 작성된 실행 파일은, 상기의 커멘드 라인으로 실행할 수 있다.
Script Filename의 지정이 없는 이외는AutoHotkey.exe(와)과 같다.

AutoHotkey.exe의 실행

AutoHotkey.exe하AutoHotkey의 스크립트를 실행하는 메인 프로그램이다.
실행시의 커멘드 라인은 이하와 같은 서식이 되어 있다.
스크립트 파일을 관련지어로부터 실행하는 경우는, 의식할 필요는 없다.

AutoHotkey.exe [/f] [/r] [/ErrorStdOut] [Script Filename] [Script Parameters]

각 옵션의 의미는 이하와 같다.

/f
경고 다이얼로그를 내지 않고 , 강제적으로 기동
/r
스크립트를 재독 보고 하고 싶을 때에 사용.
/ErrorStdOut
문법 에러를 다이얼로그 표시하지 않고 표준 출력에 출력한다

단지AutoHotkey.exe(을)를 실행하는 등,Script Filename(을)를 지정하지 않고 기동했을 경우는, 기동시의 작업 디렉토리의AutoHotkey.ini하지만 읽힌다.
파일이 존재하지 않는 경우,AutoHotkey.ini(을)를 작성해도 좋은가를 문의하는 다이얼로그가 표시된다.

Script Filename(을)를 지정하지 않으면Script Parameters(을)를 지정하는 것은 할 수 없다.

Script Parameters에는 임의의 수의 문자열을 스페이스 단락으로 건네줄 수 있다.
스페이스를 포함한 경우는 「"」(으)로 둘러싼다.
건네받은 인수는,변수에 격납되어 스크립트내에서 「%1%」, 「%2%」……(와)과 같이 기술하는 것으로 참조할 수 있다.
「%0%」에는 인수의 수가 격납된다.
덧붙여 스크립트 자신 패스를 취득하려면 「%A_ScriptFullPath%」변수를 사용한다.

스크립트의 에러

스크립트의 에러에는, 읽기시의 에러와 실행시의 에러가 있다.

존재하지 않는 커멘드나 함수의 호출해, 커멘드의 서식 잘못해, 존재하지 않는 라벨의 지정, 열림 괄호라고 닫아 괄호의 대응의 미비등이 읽어들여 때 에러가 된다.
이러한 문제가 있는 스크립트를 실행하려고 하면, 에러 개소나 에러 개요등이 다이얼로그로 표시되고 실행은 행해지지 않는다.

스크립트의 실행중에 커멘드가 어떠한 형태로 실패했을 경우등에는, 실행시 에러가 된다.
실행시 에러가 발생하면, 다이얼로그가 표시되어 에러의 발생했다스렛드(은)는 그 자리에서 종료한다.
hot key등을 할당할 수 있어상주 상태(이)가 되어 있는 스크립트에서는, 스크립트 자체는 종료하지 않는다.그러나, 스크립트가 기대 대로에 실행되지 않았던 것으로, 그 후의 실행에 지장을 초래하는 경우가 있다.

리로드

task tray 아이콘의 오른쪽 클릭 메뉴로부터 「Reload This Script」(을)를 실행하는 것으로, 스크립트를 다시 읽어들여 실행할 수 있다.
또, 상주 상태가 되어 있는 스크립트는, 같은 스크립트를 한번 더 기동하는 것으로, 「기존의 프로세스를 종료해 기동할까」를 문의하는 다이얼로그가 표시되어 「네」를 선택하는 것으로 다시 읽기 한다.
Reload커멘드로 스크립트중으로부터 다시 읽기를 실시하게 하는 일도 가능.

AutoHotkey.exe의 task tray 아이콘

AutoHotkey.exe(을)를 실행하면, task tray에 아이콘이 표시된다.(이것은#NoTrayIcon지령이나Menu커멘드로 비표시에 할 수 있다)
더블 클릭으로AutoHotkey의 메인 윈도우가 표시되는 것 외에 오른쪽 클릭 메뉴로부터 이하의 조작을 실행할 수 있다.

Open
AutoHotkey의 메인 윈도우를 표시한다.
Help
헬프 파일(AutoHotkey.chm)(을)를 연다
Window Spy
윈도우 정보 표시 툴·AU3_Spy.exe(을)를 기동한다
Reload This Script
스크립트를 다시 읽기 해, 최초부터 다시 실행한다(Reload커멘드와 같다)
Edit This Script
스크립트를 메모장(notepad.exe)그리고 열린다
Suspend Hotkeys
할당한 hot key를 모두 정지한다(Suspend커멘드와 같다)
Pause Script
스크립트를 일시정지한다(Pause커멘드와 같다)
Exit
스크립트를 종료한다.ExitApp커멘드와 같다.

AutoHotkey.exe의 메인 윈도우

AutoHotkey의 메인 윈도우에서는, 실행중의 스크립트의 여러가지 정보를 표시할 수 있다.
표시 모드는 도구모음의 「View」이하로부터 선택해 바꾼다.
또, 각 화면을 표시하기 위한 커멘드도 각각 준비되어 있다.
어느 화면도, 호출 커멘드를 실행할까 「F5」키를 누르는 것으로 최신의 정보로 갱신할 수 있다.

Lines most recently executed

실행된 스크립트의 행이 차례로 표시된다.
이 화면은ListLines커멘드에서도 표시할 수 있다.

Script lines most recently executed (oldest first).  Press [F5] to refresh.  The seconds elapsed between a 
line and the one after it is in parentheses to the right (if not 0).  The bottommost line's elapsed time is 
the number of seconds since it executed.

002: Return (2.59)
003: Sleep,100 (0.11)
004: MsgBox (1.63)
005: ListLines

Press [F5] to refresh.

행 번호와 행의 내용이 실행된 순서에 표시된다.행의 내용은, 실제로 스크립트 파일에 기술되고 있는 것 것과 같다고는 할 수 없지만, 의미는 완전히 같게 되어 있다.
행의 내용의 뒤를 뒤따르고 있는 것이 있는 숫자가 들어간 「()」(은)는, 다음의 처리가 실행 될 때까지 경과한 시간(초)이다.
어떠한 이유로 스크립트의 처리를 하지 않았던 기간이 있는 경우에 표시된다.

Variables and their contents

스크립트에 의해서 작성된 변수와 그 내용이 일람표 나타난다.
이 화면은ListVars커멘드에서도 표시할 수 있다.

Local Variables for func2()
--------------------------------------------------
b[1 of 1]: a


Global Variables (alphabetical)
--------------------------------------------------
0[1 of 1]: 0
ErrorLevel[1 of 1]: 0
value[8 of 63]: aaaaaaaa

각 행의 선두가 변수명이다.일람은 변수명 순서에 늘어놓을 수 있고 있다.
변수명의 뒤의 「[x of y]」가 되고 있는 부분은, 왼쪽의 숫자가 변수의 내용의 문자수, 오른쪽의 숫자가 변수를 위해서 확보되고 있는 메모리의 용량(VarSetCapacity()함수로 설정 가능)이다.
「:」보다 오른쪽으로 변수의 내용의 선두60아르바이트분이 표시된다.

화면이 표시된 시점에서AutoHotkey의유저 정의 함수하지만 실행되고 있는 경우는, 함수내에서만 유효한 로컬 변수의 일람이 표시된다.(「Local Variables for ...」이하의 부분)
함수중에서 다른 함수 호출을 하고 있는 경우에서도, 현재 실행되고 있는 맨 위위의 함수의 물건만이 표시된다.

Hotkeys and their methods

스크립트에 의해서 할당할 수 있고 있는 hot key가 일람표 나타난다.
이 화면은ListHotkeys커멘드에서도 표시할 수 있다.

Type	Off?	Running	Name
-------------------------------------------------------------------
reg			F1
m-hook			MButton
k-hook			$F2
k-hook			F3

각각의 열의 의미는 이하와 같다.

Type
hot key의 등록 방법.이하와 같은 것이 있다.
reg
Windows의 hot key 등록 기구를 이용해 등록
reg(no)
hot key가 무효화되고 있기 때문에, 등록을 해제되어 있다
k-hook
키보드 훅에 의해서 키 눌러 인하를 검지하고 있다
m-hook
마우스 훅에 의해서 mouse button 눌러 인하를 검지하고 있다
2hooks
마우스와 키보드의 양쪽 모두의 훅을 사용하고 있다
joypoll
죠이스틱의 버튼을 검출하기 위한 처리를 실시하고 있다
Off?
Hotkey커멘드등에 의해서 일시적으로 무효화되고 있는 경우는 「OFF」(이)가 된다
#IfWinActive지령의 조건 나누기에 의해 복수 할당할 수 있었던 우리 일부만이 무효화되고 있는 경우는 「PART」(이)가 된다
Running
hot key 써브루틴의 스렛드가 실행되고 있는 수
Name
hot key명

Key history and script info

키보드의 이력이나 밀리고 있는 키, 그 외 스크립트의 정보등이 표시된다.
KeyHistory커멘드에서도 표시할 수 있다.

Window: E:\test\test.ahk - AutoHotkey v1.0.44.07
Keybd hook: yes
Mouse hook: yes
Enabled Timers: 0 of 0 ()
Interrupted threads: 0
Paused threads: 0 of 0 (0 layers)
Modifiers (GetKeyState() now) = 
Modifiers (Hook's Logical) = 
Modifiers (Hook's Physical) = 
Prefix key is down: no

NOTE: To disable the key history shown below, add the line "#KeyHistory 0" anywhere in the script.  The same 
method can be used to change the size of the history buffer.  For example: #KeyHistory 100  (Default is 40, 
Max is 500)

The oldest are listed first.  VK=Virtual Key, SC=Scan Code, Elapsed=Seconds since the previous event.  Types:
 h=Hook Hotkey, s=Suppressed (blocked), i=Ignored because it was generated by an AHK script, a=Artificial, #=
Disabled via #IfWinActive/Exist.

VK  SC	Type	Up/Dn	Elapsed	Key		Window
-------------------------------------------------------------------------------------------------------------
78  043	 	u	0.08	F9             	E:\test\test.ahk - VxEditor
70  03B	 	d	2.61	F1             	
70  03B	 	u	0.11	F1             	
01  000	 	d	0.98	LButton        	
01  000	 	u	0.08	LButton        	
Press [F5] to refresh.

상부에 표시되는 정보의 의미는 이하와 같다.

Window
이 화면이 표시되기 직전에 액티브했던 윈도우의 타이틀
Keybd hook
키보드 훅이 유효하게 되어 있으면 「yes」.키보드 훅을 유효하게 하려면 , 「$」수식자 hot key를 할당하는지,#InstallKeybdHook지령을 기술해 둔다
Mouse hook
마우스 훅이 유효하게 되어 있으면 「yes」.마우스 훅을 유효하게 하려면 , mouse button에 hot key를 할당하는지,#InstallMouseHook지령을 기술해 둔다
Enabled Timers
유효화 되고 있는 타이머의 수.「()」 안은 할당할 수 있었던 라벨명의 일람.타이머의 할당은SetTimer커멘드로 실시한다
Interrupted threads
스렛드의 세치기에 의해서 정지하고 있는 스렛드의 수
Paused threads
Pause커멘드등에 의해서 정지하고 있는 스렛드의 수
Modifiers (GetKeyState() now)
눌러 내려지고 있는 수식 키의 일람(GetKeyState()함수등에서 눌러 인하 상태라고 인식되는 것)
Modifiers (Hook's Logical)
눌러 내려지고 있는 수식 키의 일람(프로그램등에 의해서 눌러 내려지고 있는 것)
Modifiers (Hook's Physical)
눌러 내려지고 있는 수식 키의 일람(실제로 키보드의 키가 눌러 내려지고 있는 것)
Prefix key is down
「MButton & LButton」(와)과 같은 콤비네이션 키의 좌측으로 지정되어있는 키가 밀리고 있을 때 「yes」(이)가 된다

이력 부분의 설명문에 이어 키의 이력이 표시된다.
아래에 갈 만큼 새로운 이벤트이다.
각각의 열은 이하와 같은 의미가 되어 있다.

VK
조작된 키의 가상 키코드.hot key 라벨이나Send커멘드등에서 「vk??」(와)과 같이 해 키명 대신에 사용할 수 있다
SC
조작된 키의 스캔 코드.hot key 라벨이나Send커멘드등에서 「sc???」(와)과 같이 해 키명 대신에 사용할 수 있다
Type
이벤트의 타입.이하의 것이 있다.
h
훅을 이용한 hot key가 발동했다
s
훅에 의해서 이벤트가 은폐 되었다(어느 키에 hot key를 할당할 수 있고 있고, 그 키가 밀어 올려 이벤트에는 아무것도 할당할 수 있지 않은 경우, 밀어 올려 이벤트가 은폐 된다)
i
AutoHotkey자신이 생성한 이벤트(AutoHotkey의 hot key는 발동하지 않는다)
a
다른 프로그램에 의해서 생성된 이벤트
#
hot key는 할당할 수 있고 있지만#IfWinActive지령의 조건에 일치하지 않기 때문에 무시되었다
Up/Dn
키를 눌렀을 경우는 「d」, 떼어 놓았을 경우는 「u」(이)가 된다
Elapsed
하나전의 이벤트로부터의 경과시간(초)
Key
키명
Window
이벤트가 발생한 윈도우의 타이틀.윈도우가 바뀐 직후의 이벤트만 표시된다

AutoHotKey(오토핫키) 설명서 Tools

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

외부 툴 소개

AutoHotkey(으)로부터 호출해 이용하면 편리한 온라인 소프트웨어를 소개합니다.

CraftDrop
지정 파일을 지정 윈도우에 의사적으로 드롭 하는 툴
1대의 비행기능툴집
란체등에서 이용하는 툴군

CraftDrop

Description

커멘드 라인으로 받은 파일을 임의의 윈도우에 의사적으로 드롭 하는 프로그램입니다.
드롭처의 윈도우는, 실행시에 선택하는 것 외에 커멘드 라인으로 지정할 수도 있습니다.

SampleScript

마우스아래의 윈도우에 파일을 드롭 합니다.

MouseGetPos,x,y,win,ctr
WinGetClass,cls,ahk_id %win%
WinGetTitle,ttl,ahk_id %win%
Run,D:\CraftDrop\cdrop.exe /t%ttl% /c%cls% %FILENAME%

WebSite

Craftware(http://hp.vector.co.jp/authors/VA012411/)

1대의 비행기능툴집

Description

란체등에서 이용하는 1대의 비행기능툴을 다수 공개하고 있는 페이지입니다.
AutoHotkey그리고 유용한 것으로 해서는, 이하와 같은 툴이 있습니다.

  • 벽지 변경
  • 지정 파일의 context menu 표시
  • 트레이 개폐, 리모트 미디어의 배출
  • 지정 파일을 크리프보드에 카피(익스플로러 등에 붙일 수 있다)
  • 스크린 세이버의ON/OFF변환
  • 스크린 세이버 기동

WebSite

1대의 비행기능툴집(http://cspace.s2.xrea.com/software/SimpleCommand/)

AutoHotKey(오토핫키) 설명서 Scripts

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

스크립트

스크립트의 구성요소

AutoHotkey의 스크립트는, 이하와 같은 요소로 구성된다.

커멘드

FileAppend,This is test file.,test.txt
Run,notepad.exe test.txt

AutoHotkey의 스크립트는, 원칙으로서1행에 하나의 커멘드를 기술한다.
1행의 문자수는16,383아르바이트 이내라고 하는 제한이 있다.
커멘드는, 커멘드명과 인수를 콤마로 단락지어 기술한다.
커멘드명의 직후는, 공백 문자로 단락지으면, 콤마를 생략 해도 괜찮다.(제1인수에 공백을 지정하는 경우를 제외하다)
인수에 문자열을 지정하는 경우에서도, 「"」등에서 괄충분해는 하지 않고, 그대로 기술한다.
인수의 선두와 말미의 공백 문자는 무시되지만, 「%A_Space%」(와)과 같이 짜넣어 변수의 참조로서 기술하면 무시되지 않게 된다.
또,AutoTorim(을)를Off(으)로 하는 것도, 전후의 공백이 무시되지 않게 할 수 있다.

커멘드에는, 단지 그 자리에서 실행되어 다음의 행으로 옮기는 것 뿐만이 아니고, 조건에 의해서 다음에 실행되는 행이 바뀐다If계 커멘드나, 일련의 커멘드를 반복해 실행한다Loop커멘드, 스크립트의 다른 장소에 점프 한다GoTo커멘드,GoSub커멘드 등도 있다.

사용할 수 있는 커멘드에 대해서는,레퍼런스(을)를 참조.

복수행에 건너는 식·커멘드

if(value=1
    or value=2){
    MsgBox,value is 1 or 2
}

최초의 비공백 문자가 「++」 및 「--」이외의 연산자의 경우, 전의 행의 계속으로 간주해진다.
긴 식을 분할하는 것으로, 스크립트의 가독성을 향상 당한다.

Gui,Add,Text
    ,w100 h100 xp+0 yp+24 vTextLabel
    ,DUMMYMESSAGE

「,」도 연결에 사용할 수 있기 위해, 커멘드의 인수를 복수행으로 분할할 수도 있다.

MsgBox,1
    +2

커멘드의 인수에서는, 「+」등의 연산자는 문자열의 일부로 간주해지지만, 행의 연결에는 유효하기 때문에, 상기예에서는 「1+2」라고 하는 문자열이 표시된다.

val:=var1
    ;comment
    +var2 ;comment
    /* comment
    */ +var3

공행, 공백 문자만의 행, 코멘트등이 늦지 않아도 연결할 수 있다.

히아드큐먼트

MsgBox,this
(
 is
 long
) message

「(」만의 행이 있으면, 그 다음의 행으로부터 다음의 「)」(으)로 시작되는 행의 것까지가 개행(`n)단락으로 연결되어 직전의 행의 계속으로서 추가된다.

상기예에서는, 이하와 같이 표시된다.

this is
 long message

도중에 「)」(으)로 시작되는 행을 포함하고 싶은 경우는, 「`)」(와)과 같이 이스케이프 한다

연결 후의 행의 총문자수는16,383아르바이트까지이다.

「(」의 후에는, 이하의 옵션을 공백 문자 단락으로 열거할 수 있다.

Join[Str]
각 행의 사이에 삽입하는 문자열을 개행(「`n」)이외로 변경한다.단지 「Join」라고 지정하면, 단락 문자 없음으로 연결된다.
Str에는15아르바이트까지의 문자열을 지정할 수 있다.이Str부분에서만, 「`s」(이)가 반각 스페이스로 간주해진다.(례:「Join<br`s/>」)
LTrim
각 행의 줄머리의 반각 스페이스나Tab문자를 무시한다
RTrim0
줄 끝의 말미의 반각 스페이스나Tab문자를 무시하지 않게 한다
C
「;」에 의한 행 코멘트, 줄 끝 코멘트를 유효하게 한다
%
「%」(을)를 자동적으로 「`%」에 이스케이프 한다(변수 전개등이 행해지지 않게 된다)
`
「`」(을)를 자동적으로 「``」에 이스케이프 한다(「`n」등이 그대로 문자열의 일부로서 다루어진다)
,
콤마(「,」)하지만 자동적으로 「`,」로서 이스케이프 되는 것을 억제한다(커멘드의 인수의 단락등으로 해서 다루어지게 된다)

블록

If a=1
{
	FileAppend,This is test file.,test.txt
	Run,notepad.exe test.txt
}

「{」라고 하는 내용의 행이 있으면, 「}」라고 하는 내용의 행이 나타날 때까지가 하나의 블록이 된다.If계 커멘드에 의한 조건 분기나Loop에 의한 반복 처리로, 복수의 커멘드를 연속해 실행시키는 경우에 사용한다.
줄머리의Tab에 의한 인덴트는 있어도 없어도 좋지만, 인덴트 해 두면 가독성이 향상한다.
자세한 예 등은블록의 설명을 참조.

프리프로세서 지령

커멘드와는 별도로 「#」(으)로 시작되는 프리프로세서 지령과 같은 것이 있다.
이것은, 스크립트가 실행되기 전의 해석의 단계에서 처리되므로, 인수에 변수의 참조를 포함하는 것은 원칙으로서 할 수 없다.
통상은, 블록등의 안쪽에서 사용하는 것은 할 수 없다.

각종 지령에 대해서도,레퍼런스(을)를 참조.

라벨

Label1:
MsgBox,Label1

Goto,Label1

라벨명에 이어 「:」(이)가 기술되었을 뿐의 행이 있으면, 라벨로 해서 인식된다.
GoTo커멘드나GoSub커멘드를 사용하는 것으로, 특정의 라벨의 직후의 행에 처리를 점프 시킬 수 있다.
GoSub커멘드로 점프 했을 경우는,Return커멘드를 실행하는 것으로써GoSub하지만 실행된 다음의 행으로 돌아올 수 있다.

OnClipboardChange등 특정의 명칭의 라벨이 존재하면, 대응하는 이벤트가 발생했을 때에AutoHotkey에 의해서 자동적으로 실행된다.
또,OnExit커멘드등과 같이 이벤트에 대해 라벨을 할당하는 커멘드도 있다.

hot key 라벨

#F1::
Run,notepad
Run,iexplore
return

키명에 이어 「::」(이)가 기술된 행은 hot key 라벨이 되어, 그 키가 밀렸을 때에 그 자리소에 기술된 커멘드가 실행되게 된다.
또, 보통 라벨과 같이GoTo등에서 점프 하는 것도 가능하다.
자세한 것은hot key의 항을 참조.
또, 이용할 수 있는 키명에 대해서는키 리스트의 항을 참조.

#F1::Run,notepad

hot key에 할당하는 써브루틴은,1행 뿐이라면 라벨과 같은 행에 기술해도 좋다.

키리맵 정의

q::d

키명과 「::」에 이어 다른 키명만을 기술하면, 어느 키의 동작을 다른 키의 동작으로 바꾸어 버리는 리맵을 실시할 수 있다.
이것은 라벨은 아니기 때문에,GoTo등에 의하는 점프는 할 수 없다.
자세한 것은리맵의 항을 참조.

핫 스트링 라벨

::ahk::AutoHotkey

hot key 외에, 특정의 문자열이 타입 되었을 때에 자동적의 다른 문자열에 다시 타이프 치거나 써브루틴을 실행시키거나 하는 「핫 스트링」이라고 하는 기능이 존재한다.
자세한 것은Hotstring의 항을 참조.

유저 정의 함수

add(a,b,c=0,d=0){
	return a+b+c+d
}
MsgBox,% add(1,2,3)

인수를 받아 일련의 동작을 실행해, 돌아가 값을 돌려주는 함수를 정의할 수 있다.
함수는 식 중(안)에서 사용하거나 단독으로 호출하거나 해 사용한다.

자세한 것은함수의 항을 참조.

코멘트

;this is comment
MsgBox,this is message ;this is comment
/*
this
     is
        comment
*/

줄머리에 「;」(세미콜론)(이)가 있는 행은 코멘트행이 되어, 무시된다.
또, 커멘드의 후에 반각 스페이스를 비우고 세미콜론이 있으면, 그 이후도 코멘트가 된다.

「/*」(으)로 시작되는 행과 「*/」라고 하는 내용의 행의 사이도 코멘트가 된다.

값의 데이터 형식

커멘드의 인수로서 사용되는 데이터는, 모두 문자열로서 보관 유지된다.
일정한 서식에 합치하는 문자열의 경우, 정수·소수·일자 시각으로서 계산등에서 사용할 수 있다.
「100」(이)나 「0xFFFF」(와)과 같은 것이 정수치, 「10.05」(이)나 「6.023e+23」(와)과 같은 것이 소수치, 「20061231235959」(와)과 같은 것이일자 시각(으)로서 다루어진다.
변수의 내용이 이러한 형식일지를 판정하려면 ,If var is [not] type(을)를 사용한다.
각 커멘드가 정수나 소수를 출력할 때는,SetFormat커멘드로 설정한 서식에 따라서 출력된다.
정수는 부호 첨부64비트 상당한 범위의 값을 취급할 수 있다.
소수는double상당한의 것이 취급할 수 있다.

a=this is string
MsgBox,%a%

b=10
b*=10
MsgBox,%b%

c=0.1
c*=4
MsgBox,%c%

d=20060101
EnvAdd,d,2,Days
MsgBox,%d%

변수

Var = 123abc			;변수 「Var」에 「123abc」라고 하는 값을 대입
MsgBox,Var is %Var%		;「Var is 123abc」라고 표시된다

이름이 붙은 「변수」에 데이터를 격납해 둘 수 있다.
변수명에는 알파벳, 숫자, 「_」등의 문자를 사용할 수 있다.
「Var=this is value」(와)과 같이 쓰는 것으로, 변수에 값을 격납할 수 있다.
변수에 격납한 값은, 「%Var%」(와)과 같이 커멘드의 인수중에 묻는 것으로, 내용을 전개해 사용할 수 있다.
같은 값을 복수의 장소에서 사용하고 싶을 때 등, 여러가지 목적으로 사용된다.

FileRead,Var,test.txt		;test.txt의 내용이 읽혀 변수 「Var」에 격납된다

또, 커멘드에 따라서는, 처리의 결과등을 변수에 격납하는 일이 있다.
많은 경우, 인수로서 격납처의 변수의 변수명을 지정할 수 있다.

VarName=FileContent
FileRead,%VarName%,test.txt		;격납처 변수는 「FileContent」
MsgBox,%FileContent%			;읽어들인 내용이 표시된다

격납처의 변수명을 지정하는 인수에서도, 「%Var%」(와)과 같은 변수 전개를 사용할 수 있다.
이 테크닉은, 불특정 다수의 데이터를 취급할 때 등에 도움이 되는 일이 있다.

EnvSet,TestEnv,this is a test env
Run,%ComSpec% /K set TestEnv 		cmd.exe하지만 기동해,TestEnv에 격납된 내용을 표시한다

변수와는 별도로, 환경 변수도 취급할 수 있다.EnvSet커멘드로 환경 변수에 대입을 실시할 수 있다.
이 환경 변수는,Run커멘드등에서 기동한 프로그램내로부터 참조할 수 있다.
「%Var%」(와)과 같은 변수의 전개에서는, 통상의 변수와 같이 환경 변수도 전개할 수 있지만, 미정도리의 변수는 길이0의 문자열에 전개된다.
#NoEnv」지령을 사용하는 것으로, 환경 변수의 참조를 무효화해, 처리 효율을 높일 수 있다.
이 경우에서도, 「EnvGet」커멘드를 사용하면, 환경 변수의 값을 읽어들이는 것은 가능하다.

미리 준비된 편입 변수로 불리는 변수도 있다.
사용할 수 있는 편입 변수에 대해서는,편입 변수의 항을 참조.
많은 편입 변수는 대입에 의해 직접 변경하는 것은 할 수 없다.
잘 사용되는 편입 변수로서 커멘드의 실행 결과를 격납한다ErrorLevel변수가 있다.

변수에 값을 격납하면, 값의 용량보다 약간 좀 많은 메모리가 확보된다.
이것은, 내용의 변경으로 용량이 많아졌을 때, 하나 하나 메모리를 다시 확보할 필요가 없게 하기 위한(해)이다.
「var=」라고 하도록(듯이), 하늘의 값을 할당하는 것으로, 할당할 수 있었던 메모리를 개방할 수 있다.
하나의 변수의 용량의 상한은64KB까지되고 있지만,#MaxMem지령으로 변경할 수 있다.

변수의 계산

변수가 수치의 경우,EnvAdd, EnvSub, EnvMult, EnvDiv커멘드로 사칙 연산을 실시할 수 있다.
이것들 커멘드의 생략형으로서 「+=」,「-=」,「*=」,「/=」(이)가 사용할 수 있다.
좌변에는 변수명이 오지만, 우변에는 값이 오지 않으면 안 되기 때문에, 「%」(으)로 사이에 두어 변수의 내용을 전개하도록(듯이) 할 필요가 있다.

posX = 0
posX += %speedX%

이러한 커멘드에서는, 제1인수와 제2인수의 어느쪽이나가 정수라면 결과는 정수에, 어느 쪽인지 한편에라도 소수 형식의 값이 포함되어 있으면 결과는 소수가 된다.
정수로 제산을 실시해 결과를 소수로 얻고 싶은 경우, 다음과 같이 소수 형식의 값으로 나누어 줄 필요가 있다.

var=10
var/=3.0

또,0(을)를 더하는 등의 결과가 변하지 않는 계산을 실시하는 것으로, 형식의 변환만을 실시할 수 있다.

SetFormat,FLOAT,0.0	;소수의 소수점 이하를 잘라 버리도록(듯이) 한다
var+=0		;var의 내용이 정수 형식에 변환된다
var+=0.0	;var의 내용을 소수 형식에 변환

「:=」에 의한 대입이나 「If()」에 의한 조건 분기등에서는, 복잡한 식을 사용할 수도 있다.
1회의 사칙 연산 뿐이라면 「v:=v+1」보다 「v+=1」(분)편이 고속으로 실행되지만,2회이상의 연산은 복수의 커멘드로 나누는 것보다 하나의 식으로 하는 것이 고속으로 실행될 가능성이 있다.

문자열 처리

「StringTrimLeft」 등, 「String」(으)로부터 시작되는 커멘드에서는, 문자열의 시작이나 분할등의 문자열 처리를 실시할 수 있다.
문자열을 차례로 줄서 바꾸는 「Sort」커멘드 등도 있다.
또,Transform커멘드의 서브 커멘드 「Deref」에서는, 「value is %var%」(와)과 같은 문자열의 변수 참조를 전개시킬 수 있다.
템플릿 파일에 항목을 묻거나 하는데 이용할 수 있다.

조건 분기 커멘드

If커멘드로 조건 분기를 실시할 수 있다.
비교 조건은,if var = value그렇다고 하는 형태로 기술할 수 있다.
비교 연산자는, 「=」, 「<>」(not equal), 「>」 「<」 「>=」 「<=」(이)가 사용할 수 있다.
좌변에는 변수명이 오지만, 우변에는 값이 오지 않으면 안 되기 때문에, 「%」(으)로 사이에 두어 변수의 내용을 전개하도록(듯이) 할 필요가 있다.

If MyVar > %Max%
	MsgBox,over
else
	MsgBox,not over

그 외에도, 몇개의 조건문을 사용할 수 있다.

If/IfEqual/IfNotEqual/IfLess/IfLessOrEqual/IfGreater/IfGreaterOrEqual
변수의 비교(「=」 「<>」 「>」 「<」 「>=」 「<=」와 같다)
if(식)
식의 결과의 값에 의해서 분기
IfExist / IfNotExist
파일의 존재의 유무
IfInString / IfNotInString
문자열중으로 지정의 문자열이 포함될지
If var [not] in values / If var [not] contains values
var의 내용이values에 열거한 문자열과 일치할지
If var is [not] type
변수의 데이터 형식
IfMsgBox
제일 최근의MsgBox커멘드로 밀린 버튼
IfWinActive
지정한 윈도우가 액티브할지
IfWinExist
지정한 윈도우가 존재할지

반복 처리

Loop문장으로 반복 처리를 사용할 수 있다.
반복 회수나, 대상 데이터는편입 변수(으)로서 취득할 수 있다.
복수행의 처리를 반복할 때는,Continue커멘드로 나머지의 처리를 스킵 해 다음의 회의 실행으로 옮길 수 있다.
또,Break커멘드에서는 반복을 즉석에서 종료할 수 있다.

많은 프로그램 언어에 존재한다while구문이나for구문에 해당하는 것은 없기 때문에,If커멘드나Break커멘드를 사용해 자기 부담으로 기술할 필요가 있다.

반복에는, 이하의 종류가 있다.

Loop
지정 회수의 반복
LoopFile
와일드 카드 등에 매치하는 파일이나 폴더 각각 대하는 처리
LoopReg
레지스트리의 지정 키 이하의 키에 대한 처리
LoopReadFile
파일을1행씩 읽으면서 처리
LoopParse
문자열의1문자마다, 혹은 지정의 단락 기호로 단락지어진 필드 마다 처리

써브루틴 호출해, 점프

Goto커멘드를 실행하면, 지정한 라벨의 행에 점프 하고, 그 다음의 행으로부터를 실행시킬 수 있다.
또,Return커멘드로 점프 원래대로 돌아갈 수 있다Gosub커멘드도 있다. Goto문장을 너무 다용하면 프로그램을 알 수 있기 힘들어지므로, 가능한 한 사용하지 않는 것이 좋다.

함수(을)를 사용하면, 호출해 먼저 인수를 건네주거나 돌아가 값을 되돌리거나 다른 장소의 변수와 격리된 로컬 변수를 사용하거나 할 수 있다.

스렛드 세치기

이하의 커멘드로 라벨을 지정해 두면, 특정의 이벤트가 발생했을 때에 그 써브루틴이 불려 가게 된다.
이러한 써브루틴 호출에서는,스렛드의 세치기를 한다.

SetTimer
타이머에 정기적으로 실행되는 써브루틴을 지정
Menu
커스텀 메뉴를 작성해, 선택되었을 때에 실행되는 써브루틴을 지정
GUI
GUI(을)를 작성해, 버튼이 밀렸을 때 등에 실행되는 써브루틴을 지정
OnExit
스크립트가 종료할 경우에 실행되는 써브루틴을 지정
Hotkey
지정된 hot key가 밀렸을 때에 실행되는 써브루틴을 지정
핫 스트링
특정의 문자열을 타이프 쳤을 때에 써브루틴이 실행되도록(듯이) 설정

이스케이프 문자

커멘드의 인수 중(안)에서 특별한 의미가 있는 기호를 포함한 문자열을 취급하고 싶은 경우는, 기호의 전에 이스케이프 문자를 붙여 이스케이프 할 필요가 있다.
많은 프로그램 언어에서는 「\」(이)가 이스케이프 문자로서 사용되고 있지만,AutoHotkey그럼 파일 패스의 「\」의 이스케이프의 필요를 없애기 위해 「`」(Shift+@)하지만 사용된다.
이하와 같은 escape sequence가 있다.
그 이외의 문자를 이스케이프 했을 경우, 그 문자 자신이 된다.(례:「`x」→「x」)
#EscapeChar지령그리고 이스케이프 문자를 변경할 수 있다.

escape sequence 일람
기호 의미
`, 「,」(콤마)의 문자.
커멘드의 단락과 구별하기 위해(때문에), 이스케이프가 필요.
덧붙여 커멘드의 마지막 인수내에서는, 문자로서의 콤마인 것이 자명하기 때문에, 콤마를 이스케이프 할 필요는 없다.
`; 「;」(세미콜론)의 문자.
반각 스페이스인가Tab문자의 다음에 오는 경우만, 코멘트의 개시 기호와 구별하기 위해서 이스케이프 할 필요가 있다.
`:: 문자열 「::」(코론 둘).핫 스트링등에서 사용.
`% 「%」(퍼센트 기호)
`n 개행(LF/0x0A)
`r 복귀(CR/0x0D)
`t Tab문자(0x09)
`v 수직Tab(0x0B)
`b BackSpace문자(0x08)
`a Bell문자(0x07)
`f 개페이지(0x0C)
`` 「`」자신.
(이스케이프 문자2개로 이스케이프 문자 자신이 된다.)

스크립트의 기동과Auto-execute섹션

스크립트는 읽어들여 때에 해석되어최적화된다.
문법 에러는 읽어들여 때에 체크되어 수정될 때까지 실행할 수 없다.

스크립트가 읽히면, 최초로Return인가Exit하지만 실행되는지,hot key 라벨하지만 기술되고 있는 행이나 스크립트의 마지막에 이를 때까지, 스크립트가 실행된다.
이 부분을,auto-execute섹션이라고 부른다.

hot key를 할당할 수 있거나#Persistent지령,Lock계 키의 고정등에서 상주 상태로 되지 않는 경우,auto-execute섹션이 종료한 시점에서 스크립트는 종료한다.

hot key,커스텀 메뉴 아이템,타이머그리고 기동된다스렛드그럼, 아래와 같은 커멘드로 설정되는 값은 각각 독립하고 있다.
이러한 초기치는Auto-execute섹션으로 설정할 수 있다.
설정을 하기 전에 스렛드가 불려 가면, 기대한 동작이 되지 않는 것이 있으므로,Auto-execute섹션의 가능한 한 최초의 분으로 설정하면 좋다.

스크립트의 디버그

스크립트가 기대 대로에 동작하고 있는지를 확인하려면 , 스크립트의 요소 요소에MsgBox커멘드를 넣고, 동작 상황이나 변수의 내용을 표시하면 좋다.
그 밖에도,ListVars커멘드와Pause커멘드로 변수의 내용을 정리해 표시한다고 하는 방법도 있다.
이러한 디버그는, 액티브 윈도우가 바뀌어 버리면 정상적으로 동작하지 않는 듯한 곳에서는 사용할 수 없기 때문에 주의가 필요하다.

AutoHotKey(오토핫키) 설명서 Remap

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

Remap

「키A::키B」라고 하는 행을 기술하면, 키A에 키B(을)를 할당할 수 있다.
예를 들면, 이하와 같이 하면, 「A」키를 눌렀을 때에 「b」(이)가 입력되게 된다.

a::b

이 때,Shift+A하Shift+B에,Ctrl+A하Ctrl+B에와 같이, 모든 상태로 키의 변환이 유효하게 된다.

키A, 키B에는, 「^c」(와)과 같은 수식 키와의 편성이나, mouse button, 「vkXX」(이)나 「scYYY」(와)과 같은 키코드도 지정 가능.
다만,WheelUp/WheelDown(은)는 사용할 수 없다.
또, 「a & b」(와)과 같은 콤비네이션 키도 사용할 수 없다.
아래와 같은 예에서는,X2버튼을 누르면Ctrl+C하지만,Shift+X2버튼에서는Ctrl+Shift+C하지만 입력되게 된다.

XButton2::^c

이하의 예에서는,Shift(을)를 누르면서A(을)를 눌렀을 때는, 「B」(이)가 입력된다.

+a::b

키B에 「Return」라고 쓰면return커멘드라고 인식되므로,Enter키를 할당하고 싶은 경우는 「Enter」라고 쓰는 것.

키B에 「%」(을)를 지정할 수 없다.「vk35」(으)로 대용할 수 있다.

Remarks

#IfWin...지령을 사용하는 것으로, 특정의 윈도우에서만 리맵을 유효화 당한다.

키A(을)를 눌러 내리고 있는 마나카, 키B하지만 눌러 내려지고 있는 상태가 된다.
키A, 키B하지만 함께 키보드의 통상 키의 경우는, 키 반복에 의한 반복 입력이 발생한다.
키A하지만 mouse button의 경우, 키B하지만 통상 키여도 키 반복은 발생하지 않는다.

리맵에 의해서 생성된 입력으로는, 훅을 사용하고 있는 hot key(「$^c」 등)(은)는 반응하지 않는다.

키B의 이벤트의 생성에는,AutoExecute섹션의 종료시점으로SendMode그리고 설정되어 있던 방식이 사용된다.
다만,Play모드에서는 일부의 키가 정상적으로 동작하지 않기 때문에, 가능한 한Input모드인가Event모드(디폴트)(을)를 사용하는 것.

「a::b」라고 하는 리맵을 기술했을 경우, 「*a::」와「*a up::」라고 하는 hot key의 조가 작성된다.
Suspend커멘드를 실행했을 때는, 리맵도 통상의 hot key와 같게 무효가 된다.
또, 이하와 같이 하면 리맵을 개별적으로 무효화할 수도 있다.

Hotkey, *a, off
Hotkey, *a up, off

이 리맵 기능은,Windows9x계에서는 사용할 수 없다.