AutoHotKey(오토핫키) 설명서 Process

Posted by 발전소장
2014. 8. 14. 13:49 AutoHotKey/Commands

Process

특정의 프로세스가 존재하는지 체크하거나 우선도를 변경하거나 종료시키거나 한다

Process, Exist, PID-or-Name
Process, Close, PID-or-Name
Process, Priority, PID-or-Name, NewPriority
Process, Wait, PID-or-Name, Seconds
Process, WaitClose, PID-or-Name, Seconds

Parameters

인수명설명
Cmd

이하의 커멘드명의 어떤 것인지를 지정

Exist
PID-or-Name그리고 지정한 프로세스가 존재하면,ErrorLevel 에PID하지만 격납된다.
PID-or-Name하지만 생략 되었을 경우는, 스크립트 자신의PID하지만 격납된다.
Close
프로세스를 강제 종료한다.
Priority
프로세스의 우선도를 변경한다.
제2인수를 생략 하는 것으로,AutoHotkey자신의 프로세스 우선도를 변경할 수 있다.
제3인수에 설정하고 싶은 우선도를 지정한다.
우선도는 이하의 어떤 것인가.머리 글자 한 글자의 생략형이라도 좋다.
  • Realtime
  • High
  • AboveNormal
  • Normal
  • BelowNormal
  • Low
Wait
제3당겨 수로 지정한 초수(소수도 가능)까지, 일치하는 프로세스가 존재하게 되는 것을 기다린다.
제3당겨 수가 생략 되었을 경우, 프로세스가 존재하게 될 때까지 무한하게 기다린다.
프로세스가 발견되었을 경우는,ErrorLevel 에PID하지만 격납된다.
지정 시간이 경과했을 경우는, 「0」(이)가 된다.
WaitClose
제3당겨 수로 지정한 초수(소수도 가능)까지, 일치하는 프로세스가 하나도 존재하지 않게 되는 것을 기다린다.
제3당겨 수가 생략 되었을 경우, 프로세스가 존재하게 될 때까지 무한하게 기다린다.
지정 시간이 경과해도 일치하는 프로세스가 남아 있었을 경우,ErrorLevel에 일치하는 최초의 프로세스의PID하지만 들어간다.
프로세스가 존재하지 않게 되었을 경우,ErrorLevel(은)는 「0」(이)가 된다.
PID-or-Name 프로세스ID인가 프로세스명을 지정한다.
프로세스ID
프로세스 기동시에 할당해지는 고유의 번호.
Run(이)나WinGet,Process커멘드로 취득할 수 있다.
프로세스명
많은 경우, 프로세스명은 실행 파일명과 같게 된다.
복수의 이름이 일치하는 프로세스가 있었을 경우, 최초의 하나가 대상이 된다.

ErrorLevel

PID-or-Name에 매치하는 프로세스가 발견되어, 처리에 성공했을 경우는, 그 프로세스의PID(이)가 된다.
프로세스가 발견되지 않거나, 처리에 실패했을 경우는, 「0」(이)가 된다.
커멘드가WaitClose의 경우만, 지정 시간이 경과해도 일치하는 프로세스가 남아 있었을 경우 그 프로세스의PID(이)가 되어, 프로세스가 존재하지 않게 되었을 경우, 「0」(이)가 된다.

Remarks

Wait(와)과WaitClose(은)는,100밀리 세컨드 마다 지정 프로세스의 존재를 체크한다.
조건을 채우면 즉석에서 대기를 종료해,ErrorLevel(을)를 변경해, 스크립트의 다음의 행의 실행으로 옮긴다.
대기하고 있는 동안은, 다른스렛드하지만 끼어들 수 있다.

WindowsNT4.0그리고 이 커멘드를 실행하려면 ,PSAPI.DLL(AutoHotkey에 동고)하지만 필요.

Related

Run, WinGet, WinClose, WinKill, WinWait, WinWaitClose, IfWinExist

Example(s)

; Example #1:
Run Notepad.exe, , , NewPID
Process, priority, %NewPID%, High
MsgBox The newly launched notepad's PID is %NewPID%.
; Example #2:
Process, wait, Notepad.exe, 5.5
NewPID = %ErrorLevel%  ; Save the value immediately since ErrorLevel is often changed.
if NewPID = 0
{
	MsgBox The specified process did not appear within 5.5 seconds.
	return
}
; Otherwise:
MsgBox A matching process has appeared (Process ID is %NewPID%).
Process, priority, %NewPID%, Low
Process, priority, , High  ; Have the script set itself to high priority.
WinClose Untitled - Notepad
Process, WaitClose, %NewPID%, 5
if ErrorLevel <> 0 ; The PID still exists.
	MsgBox The process did not close within 5 seconds.

; Example #3: A hotkey to change the priority of the active window's process:
#z:: ; Win+Z hotkey
WinGet, active_pid, PID, A
WinGetTitle, active_title, A
Gui, 5:Add, Text,, Press ESCAPE to cancel, or double-click a new`npriority level for the following window:`n%active_title%
Gui, 5:Add, ListBox, vMyListBox gMyListBox r5, Normal|High|Low|BelowNormal|AboveNormal
Gui, 5:Add, Button, default, OK
Gui, 5:Show,, Set Priority
return

5GuiEscape:
5GuiClose:
Gui, Destroy
return

MyListBox:
if A_GuiControlEvent <> DoubleClick
	return
; else fall through to the next label:
5ButtonOK:
GuiControlGet, MyListBox
Gui, Destroy
Process, Priority, %active_pid%, %MyListBox%
if ErrorLevel = 0
	MsgBox Error: Its priority could not be changed to "%MyListBox%".
else
	MsgBox Success: Its priority was changed to "%MyListBox%".
return


AutoHotKey(오토핫키) 설명서 PostMessage / SendMessage

Posted by 발전소장
2014. 8. 14. 13:48 AutoHotKey/Commands

PostMessage / SendMessage

윈도우나GUI컨트롤에 윈도우 메세지를 송신한다.(SendMessage(은)는 응답을 기다려 결과를 취득할 수 있다)

PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]
SendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

Parameters

인수명설명
Msg 윈도우 메세지 번호.
일반적인 메세지의 일람에 대해서는,WinAPI Database for VB Programmer의 알파벳순서 표시 「W」의 항근처를 참조.
wParam 메세지의 인수.0혹은 생략 때는0하지만 보내진다.
lParam 메세지의 인수
Control 생략 혹은 공백 때는, 윈도우에 직접 메세지가 보내진다.
그 이외의 지정 방법은윈도우 지정의 방법참조.
WinTitle 윈도우 지정의 방법참조.
WinText
ExcludeTitle
ExcludeText

ErrorLevel

PostMessage

성공하면0, 윈도우가 발견되지 않는등의 문제가 발생하면1

SendMessage

윈도우가 발견되지 않는등의 문제가 발생하면 「FAIL」.
그 이외는, 메세지의 반환값(정수).
메세지의 종류야는은, 「reply」

Remarks

Msg,wParam,lParam인수에는0...4294967295의 수치를 지정한다.
0xFF(와)과 같이16진수로 지정하는 일도 가능.

WM_SETTEXT등에서wParam,lParam에 문자열을 건네주고 싶은 경우는, 「SendMessage, 0xC, 0, "New Title"」(와)과 같이 인수를 「"」(으)로 둘러싼다.
변수의 문자열을 건네주고 싶은 경우는, 「SendMessage, 0xC, 0, &NewTitle」(와)과 같이 변수명의 전에 「&」(을)를 붙인 것을 지정한다.

함부로 윈도우 메세지를 송신하면 불편이 발생하는 일이 있으므로 주의해 사용하는 것.

SendMessage커멘드는, 메세지를 송신 후 최대5초간 응답을 기다린다.
5초이내에 응답이 없었던 경우,ErrorLevel(은)는 「FAIL」(이)가 된다.
PostMessage커멘드는 메세지를 윈도우의 메시지 큐에 추가해 즉석에서 종료한다.

WinTitle에 「ahk_id 0xFFFF」(을)를 지정하면, 존재하는 모든 윈도우에 메세지를 송신한다.
Msg에 「0x1A」(WM_SETTINGCHANGE)등을 지정할 경우에 사용하면 좋다.

Related

Message List, Message Tutorial, Automating Winamp, ControlSend, WinMenuSelectItem

Example(s)

; Turn Monitor Off:
SendMessage, 0x112, 0xF170, 2,, Program Manager   ; 0x112 is WM_SYSCOMMAND, 0xF170 is SC_MONITORPOWER.
; Note for the above: Use -1 in place of 2 to turn the monitor on.
; Use 1 in place of 2 to activate the display's "low power" mode.
; Start the user's chosen screen saver:
SendMessage, 0x112, 0xF140, 0,, Program Manager   ; 0x112 is WM_SYSCOMMAND, and 0xF140 is SC_SCREENSAVE.
; Scroll up by one line (for a control that has a vertical scroll bar):
ControlGetFocus, control, A
SendMessage, 0x115, 0, 0, %control%, A
; Scroll down by one line:
ControlGetFocus, control, A
SendMessage, 0x115, 1, 0, %control%, A
; This example asks Winamp which track number is currently active:
SetTitleMatchMode, 2
SendMessage, 1024, 0, 120, - Winamp
if ErrorLevel <> FAIL
{
	ErrorLevel++  ; Winamp's count starts at "0", so adjust by 1.
	MsgBox, Track #%ErrorLevel% is active or playing.
}


AutoHotKey(오토핫키) 설명서 PixelSearch

Posted by 발전소장
2014. 8. 14. 13:48 AutoHotKey/Commands

PixelSearch

지정 범위로 지정한 색이 존재하면, 그 좌표를 취득한다

PixelSearch, [OutputVarX], [OutputVarY], X1, Y1, X2, Y2, ColorID [, Variation, Fast|RGB]

Parameters

인수명설명
OutputVarX , OutputVarY 발견되었을 경우X좌표와Y좌표가 격납되는 변수명.
생략 가능.
X1,Y1 검색 대상이 되는 구형의 좌상의 좌표.
통상은 액티브 윈도우의 좌상으로부터의 상대 좌표이지만,CoordMode커멘드를 사용하면 스크린 전체로의 좌표가 된다.
X2,Y2 검색 대상이 되는 구형의 우하의 좌표.
통상은 액티브 윈도우의 좌상으로부터의 상대 좌표이지만,CoordMode커멘드를 사용하면 스크린 전체로의 좌표가 된다.
ColorID 검색하는 칼라 코드.
RGB(을)를16진수로0BBGGRR되는 포맷으로 지정.
PixelGetColor그리고 취득할 수도 있다.
Variation RGB각 요소마다의 허용 하는 오차.
생략시는 「0」.
Fast|RGB 이하의 것을 반각 스페이스에서 단락지어 지정한다.
Fast
고속의 검색 방법을 사용한다.
시스템의 칼라 모드가8비트 미만의 경우 동작하지 않는다.
24비트나32비트 쪽이 보다 고속으로 된다.
통상의 방법이 세로 방향을 먼저 검색하는데 대해,Fast모드는 횡방향을 먼저 검색하기 위해(때문에), 발견되는 좌표가 바뀌는 경우가 있다.
RGB
ColorID하지만0xRRGGBB의 포맷으로 간주해진다.

ErrorLevel

색이 발견되면 「0」, 발견되지 않으면 「1」, 문제가 발생하고 있으면 「2」

Remarks

검색 대상으로 할 수 있는 것은, 화면에 표시되고 있는 부분 뿐이어서, 윈도우의 화면에서는 봐 내고 있는 부분등의 색은 취득할 수 없다.
다만, 마우스 커서아래의 색은 취득할 수 있다.

Fast모드를 사용하지 않는 경우, 우선X1,Y1의 좌표로부터X2의 방향으로 검색되어 다음에Y2의 방향으로1열이동해 검색한다고 하는 동작을X2,Y2하지만 검색될 때까지 반복한다.

너무 넓은 범위를 검색하면, 처리 부하가 커지므로 주의.

Related

PixelGetColor, ImageSearch, CoordMode, MouseGetPos

Example(s)

PixelSearch, Px, Py, 200, 200, 300, 300, 16777215, 3, Fast
if ErrorLevel = 0
	MsgBox, A color within 3 shades of variation was found at X%Px% Y%Py%.
else
	MsgBox, That color was not found in the specified region.


AutoHotKey(오토핫키) 설명서 PixelGetColor

Posted by 발전소장
2014. 8. 14. 13:47 AutoHotKey/Commands

PixelGetColor

지정 좌표에 표시되고 있는 색을 취득한다

PixelGetColor, OutputVar, X, Y [,Alt|SlowRGB]

Parameters

인수명설명
OutputVar 칼라 코드를 취득하는 변수명
X,Y 색을 취득하고 싶은 피크셀의 좌표.
통상은 액티브 윈도우의 좌상으로부터의 상대 좌표이지만,CoordMode커멘드를 사용하면 스크린 전체로의 좌표가 된다.
Alt|SlowRGB 이하의 옵션을 반각 스페이스에서 단락지어 열거한다
RGB
결과가 「0xRRGGBB」의 포맷으로 취득된다.
이 포맷은,WinSet,Gui,Progress,SplashImage그리고 사용된다.
Alt
다른 방식으로 취득을 실시한다.
통상의 방식에 비해 잘못된 값이 취득되는 케이스가 적게 되지만,10%만큼 늦어진다.
Slow
더욱 확실한 방식으로 취득을 실시한다.
일부의 풀 스크린 프로그램에 대응하기 위해서 필요.
통상의 방식에 비해3배 정도 늦다.

ErrorLevel

성공시는 「0」, 실패시는 「1」.

Remarks

값은6자리수의16진수로 취득된다.
각 형은 「0xBBGGRR」(와)과 같이RGB에 대응하고 있다.
Transform커멘드의BitAnd(와)과BitShiftRight(을)를 사용하면, 각 요소를 꺼낼 수 있다.

취득할 수 있는 것은, 화면에 표시되고 있는 부분 뿐이어서, 윈도우의 화면에서는 봐 내고 있는 부분등의 색은 취득할 수 없다.

Related

PixelSearch, CoordMode, MouseGetPos

Example(s)

^!z::
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%
MsgBox, The color at the current cursor position is %color%.
return


AutoHotKey(오토핫키) 설명서 Pause

Posted by 발전소장
2014. 8. 14. 13:47 AutoHotKey/Commands

Pause

실행중의스렛드(을)를 정지한다

Pause [, Mode ,OperateOnUnderlyingThread]

Parameters

Mode하지만Off때나,Toggle때에 스렛드가 재개될 때는, 이 설정은 무효.
인수명설명
Mode 이하의 어떤 것인지를 지정.
Toggle|생략시
정지 스렛드가 있으면 재개, 없으면 정지
On
스렛드를 정지한다
Off
제일 최근 정지한 스렛드를 재개한다
OperateOnUnderlyingThread 「1」(을)를 지정하면, 현재의 스렛드가 아니고, 현재의 스렛드에 끼어들어지고 있던 스렛드를 정지한다.
이 경우, 본커멘드 실행 후, 스렛드의 나머지의 부분이 실행되어 스렛드가 종료해 끼어들어지고 있던 스렛드에 실행이 돌아온 시점에서 실행이 정지한다.
덧붙여 현재의 스렛드가 다른 스렛드에 끼어든 것이 아닌 경우, 스크립트 본체가 정지해, 타이머가 실행되지 않게 된다.

Remarks

Pause(을)를 실시하면, 현재의 스렛드의 처리를 정지한다.
현재의 스렛드에 끼어들어져 정지하고 있던 스렛드도 계속 그대로 정지한다.

Pause된 상태에서도, 새롭게 hot key나 메뉴 아이템으로부터 스렛드를 개시하는 것은 가능.
그러한 스렛드로부터 「Pause,Off」(을)를 실행해 처리를 재개시킨다.
다만, 타이머는 정지해, 타이머로 설정된 스렛드는 실행되지 않게 된다.

스크립트의 현재의 스렛드가Pause되면, task tray의 아이콘의 색이 빨강으로 바뀐다.
이 동작은, 「Menu,Tray,Icon,,,1」라고 하는 것으로 억제할 수 있다.

task tray의 메뉴로부터 「Pause Script」(을)를 실시해도,Pause할 수 있다.
덧붙여 트레이 메뉴나 메인 윈도우의 메뉴를 표시하고 있는 동안 스크립트는 정지하지만, 이것은Pause(와)과는 별개이다.

Related

Suspend, Menu, ExitApp, Threads

Example(s)

Pause::Pause ; Assign the toggle-pause function to the "pause" key.


AutoHotKey(오토핫키) 설명서 OutputDebug

Posted by 발전소장
2014. 8. 14. 13:46 AutoHotKey/Commands

OutputDebug

디버거에 문자열을 출력한다

OutputDebug, Text

Parameters

Text 출력하는 문자열

Remarks

AutoHotkey의 프로세스가 디버거에 아탓치 되고 있는 경우, 그 디버거에 디버그 문자열이 출력된다.
디버거로서는, 프리 소프트의DebugView등이 있다.

Examples

OutputDebug, %A_Now%: Because the window "%TargetWindowTitle%" did not exist, the process was aborted.


AutoHotKey(오토핫키) 설명서 OnMessage()

Posted by 발전소장
2014. 8. 14. 13:46 AutoHotKey/Commands

OnMessage()

GUI윈도우에 특정의 메세지가 보내졌을 때에 실행되는 함수를 할당한다

OnMessage(MsgNumber [, "FunctionName", MaxThreads])

Parameters

인수명설명
MsgNumber 감시·응답시키고 싶은 메세지의 번호
FunctionName 메세지를 받아들였을 때에 실행시키고 싶은 함수의 함수명을 문자열로서 지정한다
하늘의 문자열을 지정하면,MsgNumber에 대한 함수의 할당을 해제한다.
제2인수 이후를 생략 하면, 할당의 변경은 행해지지 않는다.
MaxThreads 메세지를 받아들여 함수를 실행중에 같은 메세지가 보내졌을 때, 스렛드 세치기에 의해서 실행할 수 있는 수의 상한을 지정한다.
생략시는 「1」.
끼어들어지지 않았던 경우는, 후술의 조건에 의해서 뒷전으로 될까 무시된다.
세치기를 허락하면, 메세지 이벤트가 시계열순서에 처리되지 않게 되기 위해, 통상은 변경하지 않는다.

FunctionName그리고 지정하는 함수

FunctionName([wParam,lParam,msg,hwnd])
{
}
인수설명
wParam메세지와 함께 보내진다WPARAM파라미터의 값이0...4294967296의 정수치로 주어진다
lParam메세지와 함께 보내진다LPARAM파라미터의 값이-2147483648...2147483647.의 정수치로 주어진다
msg보내진 메세지의 번호가 주어진다
hwnd메세지가 보내진 윈도우나 컨트롤의 윈도우 핸들이 주어진다

할당하는 함수는,4개의 인수를 받을 수 있다.
인수명은 자유롭게 적어 상관없다.
그 인수로 주어지는 정보가 필요없는 경우, 인수의 설정을 생략 해도 상관없다.

함수가 불려 갈 때 , 이하의 편입 변수에도 메세지를 받아들인 상황에 따른 값이 설정된다.
또,LastFoundWindow(은)는 메세지를 받아들인 윈도우(메세지가 컨트롤에 보내졌을 경우는, 그 친윈도우)(이)가 된다.

A_Gui
메세지를 받아들인 것이GUI윈도우나GUI윈도우상의 컨트롤이었던 경우,GUI윈도우의 번호가 격납된다.
AutoHotkey의 메인 윈도우 등, 그 이외의 윈도우였던 경우는 공문자열이 된다.
A_GuiControl
메세지를 받아들인 것이GUI윈도우상의 컨트롤이었던 경우, 그 컨트롤에 할당할 수 있었던 변수명(없으면 컨트롤의 텍스트)하지만 격납된다.
그 이외의 경우, 하늘의 문자열이 된다.
A_GuiX
A_GuiY
메세지가PostMessage에 의해서 보내졌을 경우, 각각 메세지가 보내졌을 때의 마우스 커서의 횡좌표와 종좌표가 격납된다.
메세지가SendMessage에 의해서 보내졌을 경우,-2147483648(이)가 된다.
A_EventInfo
메세지가PostMessage에 의해서 보내졌을 경우, 메세지가 보내진 시간이OS기동시부터의 경과 밀리 세컨드수로 격납된다.
이 값은,A_TickCount(와)과 비교해 사용할 수 있다.
메세지가SendMessage에 의해서 보내졌을 경우,0(이)가 된다.

함수는Return문장으로-2147483648(으)로부터4294967295까지의 값을 돌려줄 수 있다.
값을 돌려주었을 경우, 메세지에의 응답은 거기서 완료한다.
함수가 돌려주어야 할 값은, 메세지의 종류에 따라서 다르다.
아무것도 값을 돌려주지 않았던 경우,AutoHotkey의 통상의 처리를 한다.

돌아가 값

문제 없게 할당을 하면, 그것까지MsgNumber에 할당할 수 있고 있던 함수의 함수명이 돌려주어진다.
다만, 그것까지 아무것도 할당할 수 있지 않았던 경우, 새롭게 할당한 함수명 자체가 돌려주어진다.
지정된 함수가 존재하지 않거나, 설정된 인수가 잘못되어 있는 경우 등, 정상적으로 할당을 실시할 수 없었던 경우는, 공문자열이 돌려주어진다.
FunctionName(을)를 주지 않았던 경우, 현재 할당할 수 있고 있는 함수명이 돌려주어진다.이 경우, 함수를 할당할 수 있지 않으면, 공문자열이 돌려주어진다.

Remarks

메세지 이벤트에 의한 함수의 실행은, 현재 실행중의스렛드에 끼어들고, 신규 스렛드로서 실행된다.

AutoHotkey의 스크립트가 메뉴를 표시중이나,KeyDelay(이)나MouseDelay의 도중등에서 정지하고 있는 동안에 보내졌을 경우,
0x312차례 미만의 메세지에 할당할 수 있었던 이벤트는 무시된다.
0x312차례 이상의 메세지의 경우는, 뒷전으로 된다.

이벤트가 무시되었을 경우, 할당할 수 있었던 함수는 실행되지 않고, 통상의 메세지 응답을 한다.
이벤트가 뒷전으로 되었을 경우, 스크립트가 실행 가능하게 된 시점에서 실행된다.

MsgBox커멘드등에서 다이얼로그가 표시되고 있는 동안은, 윈도우상의 컨트롤에 대한 메세지는 무시된다.

같은 번호의 메세지 이벤트가 실행중이었던 경우,MaxThreads의 상한을 넘지 않으면, 실행중의 스렛드에 끼어들어 메세지 이벤트가 실행된다.
메세지가0x312차례 이상으로, 실행중의 스렛드가Critical상태였던 경우, 메세지 이벤트는 뒷전으로 된다
그 이외의 경우, 메세지 이벤트는 무시된다.

다른 메세지 이벤트인가, 메세지 이벤트 이외의 스렛드가 실행중에서, 스렛드가Critical상태이거나,Thread,Interrupt의 설정에 의한 세치기 금지 기간이었던 경우,
0x0~0x311차례의 메세지는 예외적으로 끼어들어진다.
0x312차례 이상의 메세지는 뒷전으로 된다.

메세지 응답 이벤트의 우선도는 항상0이기 위해, 실행중의 스렛드의 우선도가0보다 큰 경우, 모든 메세지는 무시된다.

0x0~0x311차례의 메세지 이벤트가 무시되지 않고 실행되듯이 하기 위해서는, 다음에 메세지가 체크되기 전에 메세지 이벤트가 종료하도록 하면 좋다.
짧은 처리의 경우는, 「Critical,30」(와)과 같이 해 메세지 체크 간격을 충분히 넓게 하면, 스렛드가 종료할 때까지 메세지가 체크되지 않고, 무시되는 일도 없어진다.
처리가 긴 경우는, 이하와 같이 하고, 다른0x312차례 이상의 메세지 이벤트를 호출해, 원의 스렛드는 즉석에서 종료하면 좋다.

MSG=0x000	;처리를 할당하고 싶은 메세지
OnMessage(MSG,"OnMSG")
OnMSG(w,l,m,h){
	PostMessage,0x4000,%w%,%l%,,ahk_id %h%
}
OnMessage(0x4000,"OnMSGMain")
OnMSGMain(w,l,m,h){
	Critical	;같은 메세지가 오면 뒷전으로 되도록(듯이) 한다
	/*
		여기서 시간이 걸리는 처리를 실행
		처리중에MSG차례의 메세지가 오면, 세치기로 이벤트가 발생해,
		0x4000차례의 메세지가 재발송신 되어 그 이벤트가 뒷전으로 실행된다
	*/
}

MsgNumber그리고 함수를 할당할 수 있는 메세지의 수는, 최대로500까지이다.
그 이상의 메세지에 응답하려고 하면, 이 함수는 실패한다.

OnMessage(을)를 사용하고 있는 스크립트는, 자동적으로상주 상태한편#SingleInstance(복수 실행 불가)(이)가 된다.

자작 프로그램끼리로 독자적인 메세지를 교환하고 싶은 경우는,Windows에 미리 정의된 메세지나AutoHotkey하지만 사용하는 메세지와 겹치지 않게0x1000(4096)차례 이후의 메세지 번호를 사용하는 것이 좋다.

GUI(을)를 가지지 않는다AutoHotkey의 스크립트에 메세지를 보내고 싶은 경우는,AutoHotkey의 메인 윈도우(ahk_class AutoHotkey)에 보내면 좋다.

일반적인 메세지의 일람에 대해서는,WinAPI Database for VB Programmer의 알파벳순서 표시 「W」의 항등이 자세하다.

Related

RegisterCallback(), OnExit, OnClipboardChange, Post/SendMessage, Functions, List of Windows Messages, DllCall(), Threads

Examples

; Example: Have a script receive a custom message from some other script or program.

OnMessage(0x5555, "MsgMonitor")
OnMessage(0x5556, "MsgMonitor")

MsgMonitor(wParam, lParam, msg)
{
	; Since returning quickly is often important, it is better to use a ToolTip than
	; something like MsgBox that would prevent the function from finishing:
	ToolTip Message %msg% arrived:`nWPARAM: %wParam%`nLPARAM: %lParam%
}

; The following could be used inside some other script to run the function inside the above script:
SetTitleMatchMode 2
DetectHiddenWindows On
ReceivingScript := WinExist("Name of Receiving Script.ahk ahk_class AutoHotkey")
if ReceivingScript
	PostMessage, 0x5555, 11, 22  ; Sends to the "last found window" due to WinExist() above.
DetectHiddenWindows Off  ; Must not be turned off until after PostMessage.

; Example: The following is a working script that monitors mouse clicks in a GUI window.
; See also: GuiContextMenu

Gui, Add, Text,, Click anywhere in this window.
Gui, Add, Edit, w200 vMyEdit
Gui, Show
OnMessage(0x201, "WM_LBUTTONDOWN")
return

WM_LBUTTONDOWN(wParam, lParam)
{
	X := lParam & 0xFFFF
	Y := lParam >> 16
	if A_GuiControl
		Control := "`n(in control " . A_GuiControl . ")"
	ToolTip You left-clicked in Gui window #%A_Gui% at client coordinates %X%x%Y%.%Control%
}

GuiClose:
ExitApp


AutoHotKey(오토핫키) 설명서 OnExit

Posted by 발전소장
2014. 8. 14. 13:45 AutoHotKey/Commands

OnExit

스크립트 종료시에 실행시키고 싶은 써브루틴을 지정한다

OnExit [, Label, FutureUse]

Parameters

인수명설명
Label 종료시에 실행시키고 싶은 써브루틴의 라벨명.
생략 하면, 종료시 써브루틴을 해제한다.
FutureUse 장래의 확장을 위해서 확보되고 있다.현재 이 인수는 무시된다.

Remarks

OnExit그리고 써브루틴을 지정하면, 스크립트를 종료하는 대신에 지정한 써브루틴이 실행된다.
실제로 스크립트를 종료하려면 , 써브루틴내에서ExitApp커멘드를 실행할 필요가 있다.
OnExit써브루틴내에서ExitApp(을)를 실행했을 경우, 그 자리에서 스크립트는 종료한다.

OnExit써브루틴은, 스렛드수의 상한이나 세치기의 설정에 관계없이 반드시 끼어들어 실행된다.

OnExit써브루틴내에서 에러가 발생했을 경우, 스크립트는 그대로 종료한다.

OnExit써브루틴이 설정된 상태로Exit(이)나ExitApp(을)를 종료 코드를 지정해 실행했을 경우, 그 코드는 무시된다.
OnExit써브루틴내에서 재차 코드를 지정해ExitApp(을)를 실행하면, 종료 코드 돌출해 종료할 수 있다.

A_ExitReason변수로 제일 최근OnExit써브루틴이 실행되었을 때의 종료 이유를 참조할 수 있다.
한번도OnExit써브루틴이 실행되어 있지 않을 때는,A_ExitReason(은)는 비운다.
A_ExitReason하지만 취할 수 있는 값은 이하의 어떤 것인가.

Logoff 유저가 로그 오프 하려고 하고 있다
Shutdown 시스템이 슛다운 하려고 하고 있다
Close WM_CLOSE(이)나WM_QUIT메세지가 메인 윈도우에 보내졌다
Error 스크립트가 상주 상태가 되어 있지 않고, 어떠한 에러가 발생했다
Menu 메뉴의 표준 항목의 「Exit」(을)를 실행해 종료하려고 했을 때
Exit Exit(이)나ExitApp커멘드로 종료하려고 했다
Reload 스크립트가Reload커멘드나 메뉴 아이템으로 재독 봐 하게 할 때
Single #SingleInstance(으)로 지정된 스크립트가 새롭게 기동되고, 전의 프로세스가 종료될 때

Related

ExitApp, RegisterCallback(), Shutdown, #Persistent, Threads, Gosub, Return, Menu

Example(s)

#Persistent  ; For demonstration purposes.
OnExit, ExitSub
return

ExitSub:
if A_ExitReason <> Logoff
	if A_ExitReason <> Shutdown
	{
		MsgBox, 4, , Are you sure you want to exit?
		IfMsgBox, No, return
	}
ExitApp


AutoHotKey(오토핫키) 설명서 NumPut()

Posted by 발전소장
2014. 8. 14. 13:44 AutoHotKey/Commands

NumPut()

메모리상의 지정 주소에 정수치를 쓴다

NumPut(Number, Var|Addr [, Offset = 0, Type = "UInt"])

Parameters

인수명설명
Number쓰는 수치
Var|Addr 변수를 지정했을 경우, 그 변수에 할당할 수 있었던 메모리 영역이 대상이 된다(「&VarName」(와)과 같이 지정하는 것과 같다).
수치나 식을 지정했을 경우는, 그 수치의 주소에 써진다. 변수에 격납되고 있는 주소를 지정하고 싶은 경우는, 「VarName+0」(와)과 같이, 값의 변하지 않는 연산을 실시하면 좋다.
Offset Var|Addr그리고 지정한 영역으로부터의 오프셋을 아르바이트수로 지정한다.
「NumGet(MyVar,4)」라고 하면,MyVar변수의 메모리 영역의 선두로부터4아르바이트 파견한 위치에 써진다.
Type 값의 데이터형을 지정한다.
「"UInt"」 「"Int"」 「"Int64"」 「"Short"」 「"UShort"」 「"Char"」 「"UChar"」 「"Double"」 「"Float"」의 어느쪽이든을 지정한다.
각각의 의미는,DllCall()(을)를 참조.
다만,DllCall()(와)과 달라, 인용부호를 생략 해 지정하는 것은 할 수 없다.

Related

DllCall()


AutoHotKey(오토핫키) 설명서 NumGet()

Posted by 발전소장
2014. 8. 14. 13:44 AutoHotKey/Commands

NumGet()

메모리상의 지정 주소로부터 정수치를 읽어낸다

NumGet(Var|Addr [, Offset = 0, Type = "UInt"])

Parameters

인수명설명
Var|Addr 변수를 지정했을 경우, 그 변수에 할당할 수 있었던 메모리 영역이 대상이 된다(「&VarName」(와)과 같이 지정하는 것과 같다).
수치나 식을 지정했을 경우는, 그 수치의 주소로부터 읽어내진다. 변수에 격납되고 있는 주소를 지정하고 싶은 경우는, 「VarName+0」(와)과 같이, 값의 변하지 않는 연산을 실시하면 좋다.
Offset Var|Addr그리고 지정한 영역으로부터의 오프셋을 아르바이트수로 지정한다.
「NumGet(MyVar,4)」라고 하면,MyVar변수의 메모리 영역의 선두로부터4아르바이트 파견한 위치의 값이 읽어내진다.
Type 읽어내는 값의 데이터형을 지정한다.
「"UInt"」 「"Int"」 「"Int64"」 「"Short"」 「"UShort"」 「"Char"」 「"UChar"」 「"Double"」 「"Float"」의 어느쪽이든을 지정한다.
각각의 의미는,DllCall()(을)를 참조.
다만,DllCall()(와)과 달라, 인용부호를 생략 해 지정하는 것은 할 수 없다.

Related

DllCall()