KeyWait

키나 마우스/조이스틱 버튼을 누를 때까지 또는 뗄 때까지 기다립니다.

KeyWait, KeyName , Options

매개변수

KeyName

단순히 키보드의 문자 하나이거나 또는 마우스/조이스틱 버튼과 같이 키 목록의 키 이름 중 하나일 수 있습니다. 마우스/조이스틱 버튼과 같은 경우, 조이스틱 속성은 버튼 지원합니다.

명시적인 가상 키 코드도 vkFF와 같이 역시 지정할 수 있습니다. 이것은 키에 이름도 없고 건네질 때 보이는 문자도 생산하지 않는 아주 희귀한 경우에 유용합니다. Its virtual key code can be determined by following the steps at the bottom of the key list page.

Options

이 매개변수가 비어 있으면, 명령어는 지정된 키나 마우스/조이스틱 버튼을 물리적으로 사용자가 떼기를 무한정 기다립니다. 그렇지만, 키보드 갈고리가 설치되어 있지 않고 KeyNameSend 명령어와 같은 수단으로 인위적으로 뗀 키보드 키이면, 그 키는 물리적으로 뗀 것처럼 보일 것입니다. 마우스 갈고리가 설치되어 있지 않을 때 마우스 버튼도 마찬가지입니다.

옵션: 다음 기호로 구성되는 문자열 (순서대로, 선택적으로 사이에 스페이스 허용):

D: 키가 눌리기를 기다립니다.

L: 키의 논리적 상태를 점검합니다. 이는 OS와 활성 창이 믿고 있는 키의 상태입니다 (반드시 물리적 상태와 같은 것은 아닙니다). 이 옵션은 조이스틱 버튼에 대해서는 무시됩니다.

T: Timeout (예, T3). 시한 종료를 선언하기 전에 기다릴 초의 개수. 시한이 지나면 ErrorLevel에 1이 설정됩니다. 키나 버튼이 지정된 상태를 이루면, 이 명령어는 시한이 지나기를 기다리지 않습니다. 대신에, 즉시 ErrorLevel에 0을 설정하고 스크립트는 실행을 계속합니다.

시간제한 값은 2.5와 같이 부동 소수점 수가 될 수 있습니다. 그러나 0x03와 같은 십육진 수는 안됩니다.

ErrorLevel

명령어가 시한제한에 걸리면 ErrorLevel에 1이 설정되고 그렇지 않으면 0이 설정됩니다.

논평

키나 마우스 버튼의 물리적 상태는 보통 논리적 상태와 같습니다. 단, 키보드/마우스 갈고리가 설치되어 있지 않아야 합니다. 설치가 되어 있으면, 사용자가 물리적으로 키를 누르고 있는지 아닌지 정확하게 반영합니다. 여러분의 스크립트가 갈고리를 사용하고 있는지 알고 싶으면 KeyHistory 명령어 또는 메뉴를 사용할 수 있습니다. 두 갈고리를 모두 강제로 설치하려면 스크립트에 #InstallKeybdHook 지시어와 #InstallMouseHook 지시어를 추가하면 됩니다.

이 명령어가 대기 상태에 있는 동안에, 핫키, 맞춤 메뉴 항목, 또는 타이머를 통하여 새 쓰레드가 기동할 수 있습니다.

두 개 이상의 키가 떼어지기를 기다리려면, KeyWait를 연속적으로 사용하십시오. 예를 들어:

KeyWait Control  ; Control과 Alt가 모두 떼어지기를 기다립니다.
KeyWait Alt

키 집합 중의 한 키가 떼어지기를 기다리려면, Input 명령어의 예제 섹션을 참조하십시오.

GetKeyState(), Key List, Input, KeyHistory, #InstallKeybdHook, #InstallMouseHook, ClipWait, WinWait

예제

A 키가 떼어지기를 기다립니다.

KeyWait, a

왼쪽 마우스 버튼이 눌리기를 기다립니다.

KeyWait, LButton, D

첫 번째 조이스틱 버튼이 눌리기를 3 초까지 기다립니다.

KeyWait, Joy1, D T3

왼쪽 Alt 키가 논리적으로 떼어지기를 기다립니다.

KeyWait, LAlt, L

When pressing this hotkey, KeyWait waits for the user to physically release the CapsLock key. As a result, subsequent statements are performed on release instead of press. This behavior is similar to ~CapsLock up::.

~CapsLock::
KeyWait, CapsLock  ; 사용자가 물리적으로 떼기를 기다립니다.
MsgBox CapsLock 키를 누르고 뗐습니다.
return

Remaps a key or mouse button (this is only for illustration because it would be easier to use the built-in remapping feature). The left mouse button is kept held down while NumpadAdd is down, which effectively transforms NumpadAdd into the left mouse button.

*NumpadAdd::
MouseClick, left,,, 1, 0, D  ; 왼쪽 마우스 버튼을 누르고 있습니다.
KeyWait, NumpadAdd  ; 키가 떼어지기를 기다립니다.
MouseClick, left,,, 1, 0, U  ; 마우스 버튼을 뗍니다.
return

키가 두 번 눌릴 때를 탐지합니다 (더블 클릭과 유사). KeyWait는 키보드의 자동 반복 특징 때문에 RControl 키를 누른 채 또다른 키를 변경할 때 원하지 않는 이중-눌림이 되지 않도록 방지하는 데 사용됩니다. 핫키의 쓰레드를 계속 실행되도록 유지해 자동-반복을 막고, #MaxThreadsPerHotkey이 기본 설정으로 1을 유지하도록 함으로써 이 기능을 구현합니다. 주의: SetTimer 페이지 하단에 1, 2, 3-클릭을 구별하는 더 정교한 스크립트가 있습니다.

~RControl::
if (A_PriorHotkey != "~RControl" or A_TimeSincePriorHotkey > 400)
{
    ; 눌림 사이에 너무 시간이 많습니다. 그래서 이것은 더블 클릭이 아닙니다.
    KeyWait, RControl
    return
}
MsgBox 오른쪽 콘트롤 키를 두 번 눌렀습니다.
return