메시지를 창이나 콘트롤에 보냅니다 (SendMessage는 승인을 기다립니다).
PostMessage, Msg , wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText SendMessage, Msg , wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText, Timeout
메시지의 첫 번째 구성요소. 표현식 가능. 비어 있거나 생략하면 0이 전송됩니다.
메시지의 두 번째 구성요소. 표현식 가능. 비어 있거나 생략하면 0이 전송됩니다.
이 매개변수가 비어있거나 생략되면, 메시지는 그의 콘트롤 중에 하나가 아니라 직접 목표 창에 전송됩니다. 그렇지 않으면, 이 매개변수는 ClassNN (클래스이름과 콘트롤의 실체 번호) 또는 콘트롤의 텍스트일 수 있습니다. 둘 모두 Window Spy로 알아낼 수 있습니다. 텍스트를 사용할 때, 부합하는 행위는 SetTitleMatchMode로 결정됩니다.
콘트롤의 HWND (창 핸들)에 작동시키려면, Control 매개변수를 빈 채로 두고 ahk_id %ControlHwnd%
를 WinTitle 매개변수에 지정하십시오 (이것은 숨은 창에도 작동합니다. DetectHiddenWindows가 꺼져 있어도 상관 없습니다). 콘트롤의 HWND는 전형적으로 ControlGet Hwnd, MouseGetPos, 또는 DllCall()을 통하여 열람됩니다.
목표 창을 식별하는 창 제목 또는 다른 기준. WinTitle 참조.
존재하면, 이 매개변수는 목표 창 텍스트의 부문자열입니다 (동봉된 Window Spy 유틸리티에 노출됨). 숨은 텍스트는 DetectHiddenText가 켜져 있어야 탐지됩니다.
제목에 이 값이 있는 창은 무시합니다.
텍스트에 이 값이 있는 창은 무시합니다.
[AHK_L 42+]: 목표 창이 메시지를 처리하기를 기다릴 밀리초의 최대 개수. 생략하면 기본값은 5000 (밀리초)입니다. 이 값은 이 매개변수를 지원하지 않았던 예전 버전의 AutoHotkey에서 기본값입니다. 메시지가 이 시간 안에 처리되지 않으면, 명령어는 끝나고 ErrorLevel에 단어 FAIL을 설정합니다. 이 매개변수는 표현식일 수 있습니다.
[v1.1.04+]: 이 명령어는 실패시 예외를 던질 수 있습니다. 더 자세한 정보는 실행시간 에러를 참조하십시오.
PostMessage: ErrorLevel은 문제가 있었으면 1이 설정됩니다. 예를 들어 목표 창이나 콘트롤이 존재하지 않을 경우에 1이 설정됩니다. 그렇지 않으면 0이 설정됩니다.
SendMessage: ErrorLevel은 문제가 있었거나 시간제한에 걸리면 단어 FAIL이 설정됩니다. 그렇지 않으면, 메시지의 숫자 값 결과가 설정됩니다. 가끔 이 값이 메시지와 그의 목표 창의 성질에 따라 "reply"일 경우가 있습니다.
가능한 값의 범위는 오토핫키의 버전과 목표 창에 따라 다릅니다. 32-비트 버전의 오토핫키를 사용하거나, 또는 목표 창이 32-비트이면, 그 결과는 0부터 4294967295 까지의 32-비트 무부호 정수입니다. 64-비트 버전의 오토핫키를 64-비트 창에 사용하면, 그 결과는 -9223372036854775808과 9223372036854775807 까지의 64-비트 부호있는 정수입니다 .
결과가 32-비트 부호 있는 정수이기를 원한다면 (-2147483648부터 2147483648까지의 값), 다음과 같이 32-비트로 잘라내고 부호있는 값으로 변환할 수 있습니다:
MsgReply := ErrorLevel << 32 >> 32
이 변환은 AutoHotkey 64-비트에서도 필요할 수가 있습니다. 왜냐하면, 32-비트 창으로부터의 결과는 확장되지 않기 때문입니다. 예를 들어, 32-비트 창으로부터의 결과가 -1이면 어느 오토핫키 버전에서도 0xFFFFFFFF으로 보입니다. 반면에 64-비트 창으로부터의 결과가 -1이면 32비트 버전의 오토핫키에서는 0xFFFFFFFF으로 보이고 64비트 버전에서는 -1로 보입니다.
이 명령어들은 주의해서 사용해야 합니다. 왜냐하면 엉뚱한 창에 메시지를 전송하면 (또는 무효한 메시지를 전송하면) 예상치 못한 행위를 야기하게 되고 심지어 목표 어플리케이션이 충돌을 일으킬 수 있기 때문입니다. 대부분의 어플리케이션은 외부 소스로부터 어떤 유형의 메시지를 받도록 설계되어 있지 않습니다.
PostMessage는 메시지를 목표 창에 연관된 메시지 큐에 넣습니다. 승인이나 응답을 기다리지 않습니다. 대조적으로, SendMessage는 목표 창이 그 메시지를 처리하기를 시간제한에 걸릴 때까지 기다립니다.
wParam과 lParam 매개변수는 정수여야 합니다. AutoHotkey 또는 목표 창이 32-비트이면, 오직 아래의 32 비트만 사용됩니다; 즉, 값은 범위가 -2147483648과 4294967295 (0xFFFFFFFF) 사이입니다. 오토핫키와 목표 창이 모두 64-비트이면, 오토핫키가 지원하는 어떤 정수도 사용할 수 있습니다. 오토핫키의 모든 정수 값처럼, 접두사가 0x이면 십육진수를 나타냅니다. 예를 들어 0xFF는 255와 동등합니다.
문자열은 변수의 주소를 지정하면 wParam 또는 lParam을 통하여 전송할 수 있습니다. 다음 예제는 주소 연산자 (&)를 사용해 전송합니다:
SendMessage, 0x000C, 0, &MyVar, ClassNN, WinTitle ; 0x000C은 WM_SETTEXT입니다
[v1.0.43.06+]: 메시지 수신자에 의하여 MyVar 안에 배정된 문자열은 별도의 추가 절차 없이 적절하게 인지됩니다. 그렇지만, 이것은 매개변수의 첫 문자가 앰퍼센드 (&)일 경우에만 작동합니다; 예를 들어, 5+&MyVar
는 작동하지 않지만 &MyVar
또는 &MyVar+5
는 작동합니다.
인용부호 처리된/기호 그대로의 문자열도 다음 예제와 같이 전송할 수 있습니다 (& 연산자는 이 경우 사용하면 안 됩니다):
#Persistent ListVars WinWaitActive, ahk_class AutoHotkey SendMessage, 0x000C, 0, "New Title" ; 0x000C은 WM_SETTEXT입니다
메시지 하나를 숨어 있든 비활성화되어 있든 시스템에 있는 모든 창에 보내려면, ahk_id 0xFFFF
를 WinTitle (0xFFFF는 HWND_BROADCAST임)에 지정하십시오. 이 테크닉은 다음 예제와 같이 방송용 의도의 메시지에만 사용해야 합니다:
SendMessage, 0x001A,,,, ahk_id 0xFFFF ; 0x001A은 WM_SETTINGCHANGE입니다
스크립트가 메시지를 받도록 하려면 OnMessage()를 사용하십시오.
이 명령어드들을 사용하는 방법에 관한 소개는 메시지 자습서를 참조하십시오.
창 제목과 텍스트는 대소문자를 구분합니다. 숨은 창은 DetectHiddenWindows가 켜져 있어야 탐지됩니다.
Message List, Message Tutorial, OnMessage(), Automating Winamp, DllCall(), ControlSend, WinMenuSelectItem
Press a hotkey to turn off the monitor.
#o:: ; Win+O Sleep 1000 ; 사용자에게 키를 뗄 기회를 줍니다 (키를 떼면 모니터가 다시 깹니다). ; Turn Monitor Off: SendMessage, 0x0112, 0xF170, 2,, Program Manager ; 0x0112는 WM_SYSCOMMAND이고, 0xF170는 SC_MONITORPOWER입니다. ; 위에 주목하십시오: 2 대신에 -1을 사용하면 모니터가 켜집니다. ; 2 대신에 1을 사용하면 모니터의 저전력 모드가 켜집니다. return
SendMessage, 0x0112, 0xF140, 0,, Program Manager ; 0x0112는 WM_SYSCOMMAND이고, 0xF140는 SC_SCREENSAVE입니다.
한 줄 위로 감습니다 (수직 스크롤 바가 있는 콘트롤에 대하여).
ControlGetFocus, control, A SendMessage, 0x0115, 0, 0, %control%, A
한 줄 아래로 감습니다 (수직 스크롤 바가 있는 콘트롤에 대하여).
ControlGetFocus, control, A SendMessage, 0x0115, 1, 0, %control%, A
PostMessage, 0x0050, 0, 0x4090409,, A ; 0x0050은 WM_INPUTLANGCHANGEREQUEST입니다.
Winamp에게 현재 활성화되어 있는 트랙 번호를 물어봅니다 (더 자세한 정보는 Winamp 자동화 하기를 참조하십시오).
SetTitleMatchMode, 2 SendMessage, 0x0400, 0, 120,, - Winamp if (ErrorLevel != "FAIL") { ErrorLevel++ ; Winamp의 카운트는 "0"에서 시작합니다. 그래서 1로 조정합니다. MsgBox, #%ErrorLevel% 번 트랙이 현재 연주 중입니다. }
Finds the process ID of an AHK script (an alternative to WinGet PID).
SetTitleMatchMode, 2 DetectHiddenWindows, On SendMessage, 0x0044, 0x405, 0, , SomeOtherScript.ahk - AutoHotkey v MsgBox %ErrorLevel% is the process id.