Input

사용자가 문자열을 타자하기를 기다립니다.

Input , OutputVar, Options, EndKeys, MatchList

매개변수

OutputVar

The name of the output variable in which to store the text entered by the user (by default, artificial input is also captured).

이 매개변수 그리고 다른 매개변수들이 생략되면, 또다른 쓰레드에서 진행 중인 Input이 즉시 종료됩니다. 그리고 그의 ErrorLevel은 단어 NewInput이 설정됩니다. 대조적으로, 현재 명령어의 ErrorLevel은 이전 Input이 종료되었으면 0이 설정됩니다. 또는 종료할 이전 Input이 없었으면 1이 설정됩니다.

OutputVar는 사실상 키눌림을 저장하지 않습니다. 대신에, 키눌림으로 생산되는 문자들을 활성 창의 키보드 레이아웃/언어에 맞게 저장합니다. 결과적으로, 문자를 생산하지 않는 키눌림은 (예를 들어 PgUp 그리고 Home) 저장되지 않습니다 (그렇지만 아래의 EndKeys 매개변수를 통하여 인지할 수 있습니다).

Note: Esc is translated to the ASCII ESC character, Chr(27). This can be avoided by including {Esc} in EndKeys, in which case pressing Esc will terminate Input.

Whitespace characters such as Tab (`t) are stored literally. Enter는 라인피드 (`n)로 저장됩니다.

Options

다른 기호로 구성되는 문자열 (순서에 상관없이, 사이에 선택적으로 스페이스 허용):

B: Backspace is ignored. Normally, pressing Backspace during an Input will remove the most recently pressed character from the end of the string. 주의: If the input text is visible (such as in an editor) and the arrow keys or other means are used to navigate within it, Backspace will still remove the last character rather than the one behind the caret (insertion point).

C: 대소문자 구분. 보통, MatchList는 대소문자를 구분하지 않습니다 (1.0.43.03 이전에서는 오직 A-Z 기호만 대소문자로 변화된다고 인지합니다. ü/Ü와 같은 기호는 인지하지 않습니다).

I: Ignore input generated by the SendEvent method if it has a send level of 0. 그렇지만 SendInput 그리고 SendPlay 방법은 이 설정에 상관 없이 언제나 무시됩니다. [v1.1.31+]: The option letter can be followed by a number to set the minimum send level. I and I1 are equivalent, and I0 is the same as not specifying the option.

L: 길이 제한 (예, L5). 최대로 허용되는 입력 길이. 텍스트가 이 길이에 도달하면, Input은 종료하고 ErrorLevel은 단어 Max가 설정됩니다. 단, 텍스트가 MatchList 문구 중 하나에 부합하는 경우는 예외입니다. 이 경우 ErrorLevel은 단어 Match가 설정됩니다. If unspecified, the length limit is 16383, which is also the absolute maximum in versions prior to [v1.1.31].

M: Ctrl+A부터 Ctrl+Z까지의 변형 키눌림은 실제 ASCII 문자가그에 상응한다면 인지되고 변환됩니다. 다음 예제를 연구해 보십시오. Ctrl+C를 인지합니다:

CtrlC := Chr(3) ; Ctrl-C에 대한 문자를 CtrlC 변수에 저장합니다.
Input, OutputVar, L1 M
if (OutputVar = CtrlC)
    MsgBox, Control-C를 눌렀습니다.
ExitApp

주의: Ctrl+A부터 Ctrl+Z까지의 문자는 Chr(1)부터 Chr(26)에 상응합니다. 또한, M 옵션 때문에 Ctrl+와 같이 어떤 키보드 단축키는 Input이 진행 중인 동안 잘못된 행위를 할 수 있습니다.

T: Timeout (예, T3). 입력을 종료하고 ErrorLevel에 단어 Timeout을 설정하기 전에 기다릴 초의 개수. 입력 시간이 초과하면, OutputVar는 사용자가 그 동안 타자한 모든 것들이 설정됩니다. 이 값은 부동 소수점 수일 수 있습니다. 예를 들어 2.5.

V: Visible. 보통, 사용자의 입력을 막습니다 (시스템으로부터 숨습니다). 이 옵션을 사용하면 사용자의 키눌림을 활성 창에 전달할 수 있습니다.

*: Wildcard (아무데나 찾음). 보통, 사용자가 타자한 것은 정확하게 MatchList 문구 중 하나에 부합해야 일치가 일어납니다. 이 옵션을 사용하면 입력 테스트의 전체 길이를 검색해서 부합을 좀 더 많이 찾을 수 있습니다.

E [v1.1.20+]: 키 코드가 아니라 문자 코드로 한-문자 종료 키를 처리합니다. 이렇게 하면 활성 창의 키보드 레이아웃이 스크립트의 키보드 레이아웃과 다를 경우 결과가 더 일관성이 있습니다. 또한 실제로 주어진 종료 문자를 생성하지 않는 키 조합이 입력을 종료하지 못하도록 막습니다; 예를 들어, @가 종료 키이면, (E 옵션이 사용될 경우) US 레이아웃에서 Shift+2는 촉발되지만 Ctrl+Shift+2는 촉발되지 않습니다. C 옵션도 사용된다면, 종료 키는 대소문자를 구분합니다.

EndKeys

키로 구성된 리스트, 그 중에 하나가 눌리면 입력을 종료합니다 (EndKey 자체는 OutputVar에 씌여지지 않습니다). 입력이 이런 식으로 종료될 때, ErrorLevel은 단어 EndKey 다음에 쌍점 그리고 EndKey이름이 설정됩니다. 예제: EndKey:., EndKey:Escape.

EndKey 리스트는 Send 명령어와 비슷한 형식을 사용합니다. 예를 들어, {Enter}.{Esc}를 지정하면 Enter, ., 또는 Esc가 입력을 종료시킵니다. 활괄호 자체를 종료 키로 사용하려면, {{} 그리고/또는 {}}을 지정하십시오.

Ctrl, Alt, 또는 Shift를 종료 키로 사용하려면, 그 키의 중립 버전이 아니라, 좌/우 버전을 사용하십시오. 예를 들어, {Control}가 아니라 {LControl}{RControl}로 지정하십시오.

[v1.0.14+]: Although modified keys such as Alt+C (!c) are not supported, certain characters that require Shift to be held down -- namely punctuation marks such as ?!:@&{} -- are supported. [v1.1.20+]: Other characters are supported with the E option described above. When the E and M options are both used, Ctrl+A through Ctrl+Z are supported by including the corresponding ASCII control characters in EndKeys.

{vkFF}와 같이 명시적인 가상 키 보드도 역시 지정할 수 있습니다. 이것은 키에 이름도 없고 건네질 때 보이는 문자도 생산하지 않는 아주 희귀한 경우에 유용합니다. 그의 가상 키 코드는 다음과 같이 종료할 수 있습니다. 아래 키 리스트 페이지에 있는 단계를 따르십시오.

MatchList

키 문구를 쉼표로-가른 리스트. 이 문구에 부합하면 Input은 종료됩니다 (그 경우 ErrorLevel은 단어 Match가 설정됩니다). 사용자가 타자한 모든 것은 정확하게 이 문구 중 하나에 부합해야 일치가 일어납니다 (단, * 옵션이 있는 경우는 예외입니다). 게다가, 구분 쉼표 둘레에 있는 스페이스나 탭은 의미가 있습니다. 즉, 부합 문자열의 일부가 됩니다. 예를 들어, MatchListABC , XYZ이라면, 사용자가 ABC 뒤에 또는 XYZ 앞에 스페이스를 타자해야 부합이 일어납니다.

연속적인 두 개의 쉼표는 글자 그대로의 쉼표 하나가 결과입니다. 예를 들어, 다음은 문자열의 끝에 문자 그대로의 쉼표 하나를 생산합니다: string1,,,string2. 비슷하게, 다음 목록에는 항목 하나가 들어 있고 그 안에 글자 그대로의 쉼표가 하나 들어 있습니다: single,,item.

MatchList 안의 항목들은 개별적인 매개변수로 취급되지 않기 때문에, 리스트는 변수 안에 완전히 포함될 수 있습니다. 실제로, 그의 길이가 16383 문자를 넘어서면 변수 안에 일부만 포함됩니다. 그 길이가 스크립트 줄의 최대 길이이기 때문입니다. 예를 들어, MatchList%List1%,%List2%,%List3%으로 구성될 수 있습니다 -- 여기에서 각 변수는 부합 문구의 방대한 부-리스트를 담고 있습니다.

에러 처리

[v1.1.04+]: 이 명령어는 아무 매개변수 없이 호출되었는데 Input이 진행 중이지 않으면 예외를 던질 수 있습니다. 더 자세한 정보는 실행시간 에러를 참조하십시오.

ErrorLevel is set to one of the following values:

Value 설명

1 또는 0

이 명령어가 매개변수 없이 사용될 때마다, ErrorLevel은 이전 입력이 성공적으로 종료하면 0이 설정되고, 아무 Input도 진행되지 않고 있으면 1이 설정됩니다.

NewInput Input이 Input 명령어를 사용하는 또다른 쓰레드에 의하여 인터럽트 되었습니다.
Max Input이 허용된 최대 길이에 도달하였습니다. 그리고 MatchList 안의 항목에 부합하지 못했습니다.
Timeout Input 시간 제한 초과.
Match Input이 MatchList 안의 항목 중 하나에 부합합니다.
EndKey:Name

EndKeys 중 하나가 눌렸습니다. Input을 종료합니다. 이 경우, ErrorLevel에 단어 EndKey가 담기고 다음에 쌍점 하나와 활괄호 없이 종료 키의 이름이 따라옵니다. 예, EndKey:Enter, EndKey:Escape, 등등.

Name이 키의 "정규화 된" 이름임을 주목하십시오. EndKeys에 어떻게 씌여져 있는지는 상관이 없습니다. 예를 들어, {Esc} 그리고 {vk1B}는 모두 EndKey:Escape를 생산합니다. GetKeyName()를 사용하면 정규화된 이름을 열람할 수 있습니다.

E 옵션이 사용되었다면, Name은 타자되어 들어 온 실제 문자입니다. 그렇지 않으면, 키 이름은 스크립트의 활성 키보드 레이아웃에 따라 결정됩니다.

[v1.1.20] 이전에서, 종료 키의 VK 코드가 0x41 (A)부터 0x5A (Z) 까지의 범위에 있다면, ErrorLevel은 보통 그에 상응하는 ASCII 문자를 담았습니다. 현재 키보드 레이아웃에 올바른가 아닌가는 상관이 없었습니다. [v1.1.20] 이후로, 올바른 문자가 사용됩니다. A부터 Z 범위의 문자가 사용되면, 하위 호환을 위해 대문자가 사용됩니다; 그렇지 않으면 보통 소문자입니다.

논평

Input이 이미 또다른 쓰레드에서 진행 중인 동안 이 명령어가 사용되면, 그 Input은 종료되고 그의 ErrorLevel에 단어 NewInput이 설정됩니다. 그 이후 (매개변수가 주어지면), 새 Input이 시작됩니다.

Input이 진행 중인 동안에, 맞춤 메뉴 항목타이머 서브루틴과 같은 새 쓰레드를 여전히 생성할 수 있습니다.

Keyboard hotkeys are still in effect while an Input is in progress, but cannot be triggered if any of the required modifier keys are suppressed, or if the hotkey uses the reg method and its suffix key is suppressed. For example, the hotkey ^+a:: might be overridden by Input, whereas $^+a:: would take precedence over Input.

If the Input is not visible, all keys are suppressed except the standard modifier keys, CapsLock, NumLock and ScrollLock. Even EndKeys and keystrokes which do not alter OutputVar are suppressed. For example, Home has no effect while LWin+D opens the Start menu (since D is suppressed but LWin is not).

스크립트가 처음으로 이 명령어를 사용할 때, (아직 설치되지 않았다면) 키보드 갈고리가 설치됩니다. 게다가, 이 스크립트는 영속적이 됩니다. 즉, ExitApp를 사용해야 종료할 수 있다는 뜻입니다. 키보드 갈고리는 다음 Suspend 명령어나 Hotkey 명령어를 사용할 때까지 여전히 설치되어 있을 것입니다. 그 순간 핫키가 핫키가 요구하지 않으면 제거됩니다.

여러 언어나 키보드 레이아웃을 사용한다면, Input은 스크립트가 아니라 활성 창의 키보드 레이아웃을 사용합니다 (Input이 보이는지 여부에 상관이 없습니다). 그렇지만, 1.0.44.03 이전은 스크립트 자신의 라이아웃이 사용됩니다.

그렇게 유연하지는 못하지만, 핫스트링이 일반적으로 Input 명령어보다 더 사용하기 쉽습니다.

InputHook() is more flexible than the Input command.

KeyWait, 핫스트링, InputBox, #InstallKeybdHook, 쓰레드, if var in/contains MatchList

예제

Waits for the user to press any key. Keys that produce no visible character -- such as the modifier keys, function keys, and arrow keys -- are listed as end keys so that they will be detected too.

Input, SingleKey, L1, {LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{AppsKey}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{CapsLock}{NumLock}{PrintScreen}{Pause}

다음은 작동하는 핫키 예제입니다. 핫키에 틸드 (~) 접두 심볼이 있으므로, 키 눌림이 활성 창까지 뚫고 전달됩니다. 그래서, 편집기 안에서 [btw를 타자하면 (또는 기타 다른 부합하는 문구를 타자하면) 스크립트는 자동으로 여러분이 지정한 행위를 수행합니다 (예를 들어 타자된 텍스트를 교체합니다). For an alternative version of this example, see Switch.

~[::
Input, UserInput, V T5 L4 C, {enter}.{esc}{tab}, btw,otoh,fl,ahk,ca
if (ErrorLevel = "Max")
{
    MsgBox, You entered "%UserInput%", which is the maximum length of text.
    return
}
if (ErrorLevel = "Timeout")
{
    MsgBox, You entered "%UserInput%" at which time the input timed out.
    return
}
if (ErrorLevel = "NewInput")
    return
If InStr(ErrorLevel, "EndKey:")
{
    MsgBox, You entered "%UserInput%" and terminated the input with %ErrorLevel%.
    return
}
; 그렇지 않으면, 부합이 발견되었습니다.
if (UserInput = "btw")
    Send, {backspace 4}by the way
else if (UserInput = "otoh")
    Send, {backspace 5}on the other hand
else if (UserInput = "fl")
    Send, {backspace 3}Florida
else if (UserInput = "ca")
    Send, {backspace 3}California
else if (UserInput = "ahk")
    Run, https://www.autohotkey.com
return