ControlSend[Raw]

흉내낸 키눌림을 창이나 콘트롤에 보냅니다.

ControlSend , Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText
ControlSendRaw: 위와 매개변수 동일.

매개변수

Control

ClassNN (콘트롤의 클래스이름과 실체 번호) 또는 콘트롤의 텍스트일 수 있습니다. 둘 모두 Window Spy로 알아낼 수 있습니다. 텍스트를 사용할 때, 부합하는 행위는 SetTitleMatchMode로 결정됩니다. 이 매개변수가 비어있거나 생략되면, 목표 창의 최상위 콘트롤이 사용됩니다. 이 매개변수가 ahk_parent이면, 키눌림이 그의 콘트롤 중 하나가 아니라 곧바로 목표 창으로 전송됩니다 (예제는 Winamp 자동화하기를 참조하십시오).

콘트롤의 HWND (창 핸들)에 작동시키려면, Control 매개변수를 빈 채로 두고 ahk_id %ControlHwnd%WinTitle 매개변수에 지정하십시오 (이것은 숨은 창에도 작동합니다. DetectHiddenWindows가 꺼져 있어도 상관 없습니다). 콘트롤의 HWND는 전형적으로 ControlGet Hwnd, MouseGetPos, 또는 DllCall()을 통하여 열람됩니다.

Keys

전송할 키 연속 (자세한 것은 Send 명령어 참조). 문자 그대로의 쉼표를 전송하려면, 피신시키십시오 (`,). 문자를 전송하는 비율은 SetKeyDelay로 결정됩니다.

Send 명령어와 다르게, 마우스 클릭은 ControlSend로 보낼 수 없습니다. 마우스 클릭을 보내려면 ControlClick을 사용하십시오.

WinTitle

목표 창을 식별하는 창 제목 또는 다른 기준. WinTitle 참조.

WinText

존재하면, 이 매개변수는 목표 창 텍스트의 부문자열입니다 (동봉된 Window Spy 유틸리티에 노출됨). 숨은 텍스트는 DetectHiddenText가 켜져 있어야 탐지됩니다.

ExcludeTitle

제목에 이 값이 있는 창은 무시합니다.

ExcludeText

텍스트에 이 값이 있는 창은 무시합니다.

에러 처리

[v1.1.04+]: 이 명령어는 실패하면 예외를 던질 수 있습니다. 더 자세한 정보는 실행시간 에러를 참조하십시오.

ErrorLevel은 문제가 있으면 1, 그렇지 않으면 0이 설정됩니다.

논평

ControlSendRaw sends the keystrokes in the Keys parameter without translating {Enter} to Enter, ^c to Ctrl+C, etc. For details, see Raw mode. It is also valid to use {Raw} or {Text} with ControlSend. [v1.1.27+]: Text mode may be more reliable for sending text.

Control 매개변수를 생략하면, 이 명령어는 목표 창에 직접 전송을 시도합니다. 그의 최상위 콘트롤에 전송하거나 (보통 올바른 창) 또는 콘트롤이 없으면 그 창 자체에 전송합니다. 창에 콘트롤이 전혀 없는 듯 보일 때, 또는 그냥 편하게 어느 콘트롤에 보내야 할지 고민하고 싶지 않을 때 유용합니다.

기본값으로, 수식 키 (Ctrl, Alt, Shift, 그리고 Win)는 보통 Send 명령어로 전송되는 것과 똑 같이 전송됩니다. 이렇게 하면 명령어 프롬프트와 기타 콘솔 창이 대문자, 제어 문자 등등을 적절하게 탐지할 수 있습니다. 또 다른 면에서 신뢰성도 향상됩니다.

그렇지만, 어떤 경우 이 수식 이벤트는 활성 창과 얽힐 수 있습니다. 특히 ControlSend가 진행 중인 동안에 사용자가 격렬하게 타자하고 있다면 또는 Alt가 전송 중이라면 (Alt는 활성 창의 메뉴 바를 활성화 시키기 때문에) 간섭 현상이 일어날 수 있습니다. 이런 일은 다음 예제와 같은 명시적으로 수식 키를 누르고 떼는 이벤트를 전송하면 피할 수 있습니다:

ControlSend, Edit1, {Alt down}f{Alt up}, Untitled - Notepad

위의 방법은 또 워크스테이션이 잠겨 있는 동안 (로그온 프롬프트로 보호되어 있는 동안)에도 수식키 눌림 (Ctrl, Alt, Shift 및 Win)을 전송할 수 있습니다.

BlockInput는 명령어 프롬프트와 같은 콘솔 창에 ControlSend를 사용할 때 절대 피해야 합니다. 왜냐하면 Ctrl과 같은 수식키와 대소문자 변환이 제대로 작동하지 못하기 때문입니다.

SetKeyDelay의 값은 키가 전송되는 속도를 결정합니다. 목표 창이 키 눌림을 제대로 받지 않으면, 다음 예제와 같은 SetKeyDelay의 두 번째 매개변수를 통하여 누름 지속 시간을 늘려 보십시오:

SetKeyDelay, 10, 10
SetKeyDelay, 0, 10
SetKeyDelay, -1, 0

목표 콘트롤이 Edit 콘트롤이면 (또는 그 비슷한 콘트롤이면), ControlSend보다 다음이 보통 더 믿을 만하고 더 빠릅니다:

Control, EditPaste, 이 텍스트는 캐럿 위치에 삽입됩니다., ControlName, WinTitle
ControlSetText, ControlName, 이 텍스트는 현재 텍스트를 완전히 교체합니다., WinTitle

ControlSend는 일반적으로 창의 메뉴 바를 조작할 수 없습니다. 이를 우회하려면, WinMenuSelectItem을 사용하십시오. 메뉴 바의 특성 때문에 그 마저도 사용할 수 없으면, 원하는 메뉴 항목에 상응하는 메시지를 찾아보십시오. 다음 SendMessage 자습서를 따르시면 됩니다.

창 제목과 텍스트는 대소문자를 구분합니다. 숨은 창은 DetectHiddenWindows가 켜져 있어야 탐지됩니다.

SetKeyDelay, 피신 연속열 (예, `%), Control, ControlGet, ControlGetText, ControlMove, ControlGetPos, ControlClick, ControlSetText, ControlFocus, Send, Winamp 자동화하기

예제

Opens Notepad minimized and send it some text. This example may fail on Windows 11 or later, as it requires the classic version of Notepad.

Run, Notepad,, Min, PID  ; Run Notepad minimized.
WinWait, ahk_pid %PID%  ; Wait for it to appear.
; Send the text to the inactive Notepad edit control.
; The third parameter is omitted so the last found window is used.
ControlSend, Edit1, 이 줄은 노트패드 창에 있는 줄입니다.{Enter}
ControlSendRaw, Edit1, Notice that {Enter} is not sent as an Enter keystroke with ControlSendRaw.

MsgBox, Press OK to activate the window to see the result.
WinActivate, ahk_pid %PID%  ; Show the result.

Opens the command prompt and sent it some text. This example may fail on Windows 11 or later, as it requires the classic version of the command prompt.

SetTitleMatchMode, 2
Run, %A_ComSpec%,,, PID  ; Run command prompt.
WinWait, ahk_pid %PID%  ; Wait for it to appear.
ControlSend,, ipconfig{Enter}, cmd.exe  ; Send directly to the command prompt window.

Creates a GUI with an edit control and sent it some text.

Gui, Add, Edit, r10 w500
Gui, Show
Gui, +LastFound
; The third parameter is omitted so the last found window is used.
ControlSend, Edit1, This is a line of text in the edit control.{Enter}
ControlSendRaw, Edit1, Notice that {Enter} is not sent as an Enter keystroke with ControlSendRaw.