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.
}