ControlSend / ControlSendRaw
흉내낸 키눌림을 창이나 콘트롤에 보냅니다.
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가 켜져(ON) 있어야 탐지됩니다.
- ExcludeTitle
제목에 이 값이 있는 창은 배제합니다.
- ExcludeText
텍스트에 이 값이 있는 창은 배제합니다.
ErrorLevel
[v1.1.04+] 이 명어는 실패시 예외를 던질 수 있습니다. 더 자세한 정보는 실행시간 에러를 참조하십시오.
ErrorLevel은 문제가 있으면 1 없으면 0이 설정됩니다.
논평
ControlSendRaw는 Keys 매개변수에 있는 키눌림을 정확하게 나타나는 그대로 전송합니다. {Enter}를 ENTER 키눌림으로, ^c를 Control-C로, 등등 변환하지 않습니다.
Control 매개변수를 생략하면, 이 명령어는 목표 창에 직접 전송을 시도합니다. 그의 최상위 콘트롤에 전송하거나 (보통 올바른 창) 또는 콘트롤이 없으면 그 창 자체에 전송합니다. 창에 콘트롤이 전혀 없는 듯 보일 때, 또는 그냥 편하게 어느 콘트롤에 보내야 할지 고민하고 싶지 않을 때 유용합니다.
기본값으로, 수식 키 (Control, Alt, Shift, 그리고 Win)는 보통 Send 명령어로 전송되는 것과 똑 같이 전송됩니다. 이렇게 하면 명령어 프롬프트와 기타 콘솔 창이 대문자, 제어 문자 등등을 적절하게 탐지할 수 있습니다. 또 다른 면에서 신뢰성도 향상됩니다.
그렇지만, 어떤 경우 이 수식 이벤트는 활성 창과 얽힐 수 있습니다. 특히 ControlSend가 진행 중인 동안에 사용자가 격렬하게 타자하고 있다면 또는 Alt 키가 전송 중이라면 (Alt는 활성 창의 메뉴 바를 활성화 시키기 때문에) 간섭 현상이 일어날 수 있습니다. 이런 일은 다음 예제와 같은 명시적으로 수식 키를 누르고 떼는 이벤트를 전송하면 피할 수 있습니다:
ControlSend, Edit1, {Alt down}f{Alt up}, Untitled - Notepad
위의 방법은 또 워크스테이션이 잠겨 있는 동안 (로그온 프롬프트로 보호되어 있는 동안)에도 수식키 눌림 (Control/Alt/Shift/Win)을 전송할 수 있습니다.
BlockInput는 명령어 프롬프트와 같은 콘솔 창에 ControlSend를 사용할 때 절대 피해야 합니다. 왜냐하면 Control과 같은 수식키와 대소문자 변환이 제대로 작동하지 못하기 때문입니다.
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 자동화하기
예제
ControlSend, Edit1, 이 줄은 노트패드 창에 있는 줄입니다., Untitled SetTitleMatchMode, 2 ControlSend, , abc, cmd.exe ; 명령어 프롬프트 창에 직접 전송합니다.