GetKeyState() / GetKeyState

키보드 키나 마우스/조이스틱 버튼이 눌려 있는지 여부를 점검합니다. 또 조이스틱 상태를 열람합니다.

GetKeyState()

KeyIsDown := GetKeyState(KeyName , Mode)

매개변수

KeyName

단순히 키보드의 문자 하나이거나 또는 마우스/조이스틱 버튼과 같이 키 목록의 키 이름 중 하나일 수 있습니다. 예제: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.

대안으로, vkFF와 같은 명시적인 가상 키 코드를 지정해도 됩니다. 아주 희귀한 경우로 키에 이름이 없을 경우 유용합니다. 그런 키의 가상 키코드는 다음 키 리스트 페이지 하단에 있는 단계를 밟아 알아볼 수 있습니다.

알려진 한계: 이 함수는 Left와 NumpadLeft 같이, 같은 가상 키 코드를 공유하면 두 키를 구별하지 못합니다.

Mode

이 매개변수는 조이스틱 상태를 열람할 때 무시됩니다.

생략하면, 모드는 기본으로 키의 논리적 상태를 열람하는 모드가 됩니다. 논리적 상태는 OS와 활성 창이 그 키의 상태라고 믿고 있는 상태를 말합니다. 그러나 반드시 물리적 상태와 같은 것은 아닙니다.

대안으로 다음 기호 중 하나를 지정할 수 있습니다:

P: 물리적 상태를 열람합니다 (즉, 사용자가 물리적으로 키를 누르고 있는지 알아봅니다). 키나 마우스 버튼의 물리적 상태는 보통 논리적 상태와 같습니다. 단 키보드/마우스 갈고리가 설치되어 있어야 합니다. 그래야 (스크립트가 실행 중인 동안 키를 누르기만 한다면) 사용자가 물리적으로 키나 버튼을 누르고 있는지 아닌지 정확하게 반영됩니다. 스크립트가 갈고리를 사용하고 있는지 KeyHistory 명령어나 메뉴 항목을 통하여 알아볼 수 있습니다. 갈고리를 강제로 설치하려면 스크립트에 #InstallKeybdHook 또는 #InstallMouseHook 지시어를 지정해야 합니다.

T: Retrieve the toggle state. For keys other than CapsLock, NumLock and ScrollLock, the toggle state is generally 0 when the script starts and is not synchronized between processes.

반환 값

This function returns 1 if the key is down (or toggled on) or 0 if it is up (or toggled off). For the joystick's special keys such as axes and POV switch, other values are retrieved.

If KeyName is invalid or the state of the key could not be determined, an empty string is returned.

GetKeyState

비추천: 이 명령어는 새 스크립트에 사용을 추천하지 않습니다. 대신 GetKeyState 기능을 사용하십시오.

GetKeyState, OutputVar, KeyName , Mode

매개변수

OutputVar

The name of the output variable in which to store the retrieved key state, which is either D for down or U for up. 키 상태를 결정할 수 없으면 이 변수는 비어 있습니다. For the joystick's special keys such as axes and POV switch, other values are retrieved.

KeyName

단순히 키보드의 문자 하나이거나 또는 마우스/조이스틱 버튼과 같이 키 목록의 키 이름 중 하나일 수 있습니다. 예제: B, 5, LWin, RControl, Alt, Enter, Escape, LButton, MButton, Joy1.

대안으로, vkFF와 같은 명시적인 가상 키 코드를 지정해도 됩니다. 아주 희귀한 경우로 키에 이름이 없을 경우 유용합니다. 그런 키의 가상 키코드는 다음 키 리스트 페이지 하단에 있는 단계를 밟아 알아볼 수 있습니다.

알려진 한계: 이 명령는 Left와 NumpadLeft 같이, 같은 가상 키 코드를 공유하면 두 키를 구별하지 못합니다.

Mode

이 매개변수는 조이스틱 상태를 열람할 때 무시됩니다.

생략하면, 모드는 기본으로 키의 논리적 상태를 열람하는 모드가 됩니다. 논리적 상태는 OS와 활성 창이 그 키의 상태라고 믿고 있는 상태를 말합니다. 그러나 반드시 물리적 상태와 같은 것은 아닙니다.

대안으로 다음 기호 중 하나를 지정할 수 있습니다:

P: 물리적 상태를 열람합니다 (즉, 사용자가 물리적으로 키를 누르고 있는지 알아봅니다). 키나 마우스 버튼의 물리적 상태는 보통 논리적 상태와 같습니다. 단 키보드/마우스 갈고리가 설치되어 있어야 합니다. 그래야 (스크립트가 실행 중인 동안 키를 누르기만 한다면) 사용자가 물리적으로 키나 버튼을 누르고 있는지 아닌지 정확하게 반영됩니다. 스크립트가 갈고리를 사용하고 있는지 KeyHistory 명령어나 메뉴 항목을 통하여 알아볼 수 있습니다. 갈고리를 강제로 설치하려면 스크립트에 #InstallKeybdHook 또는 #InstallMouseHook 지시어를 지정해야 합니다.

T: Retrieve the toggle state. 열람된 값이 D이면 그 키가 "on"이라는 뜻이고, 반면에 U이면 "off"라는 뜻입니다. For keys other than CapsLock, NumLock and ScrollLock, the toggle state is generally U when the script starts and is not synchronized between processes.

Joystick's special keys

When KeyName is a joystick axis such as JoyX, the retrieved value will be a floating point number between 0 and 100 to indicate the joystick's position as a percentage of that axis's range of motion. The format of the number can be changed via Format() or SetFormat. 다음 테스트 스크립트를 사용하면 조이스틱을 분석할 수 있습니다.

KeyName이 JoyPOV이면, 열람된 값은 범위가 0부터 35900 사이 입니다. 많은 조이스틱에 다음에 근접한 POV 값들이 사용됩니다:

논평

키나 마우스/조이스틱 버튼이 새로운 상태가 되기를 기다리려면 보통 GetKeyState 회돌이 대신에 KeyWait을 사용하는 것이 더 쉽습니다.

비정상적인 키보드 드라이버가 설치된 시스템은 키의 상태를, 특히 CapsLock 같은 키의 토글 상태를 느리게 갱신할 가능성이 있습니다. 키의 상태가 변경되면 바로 점검해야 하는 스크립트는 미리 Sleep을 사용해 시스템이 키 상태를 갱신할 시간을 주는 것이 좋습니다.

조이스틱에 GetKeyState를 사용하는 예는 조이스틱 리맵핑 페이지와 Joystick-To-Mouse 스크립트를 참조하십시오.

KeyWait, Key List, 조이스틱 리맵핑, KeyHistory, #InstallKeybdHook, #InstallMouseHook

예제

명령어 vs. 함수. Although the first code block uses the command and the second one uses the function, these two blocks are functionally identical.

GetKeyState, state, RButton  ; 우측 마우스 버튼.
GetKeyState, state, Joy2  ; 첫 번째 조이스틱의 두 번째 버튼.

GetKeyState, state, Shift
if (state = "D")
    MsgBox 적어도 하나의 Shift 키가 눌려 있습니다.
else
    MsgBox Shift 키가 어느 쪽도 눌려 있지 않습니다.

GetKeyState, state, CapsLock, T ;  CapsLock이 켜져 있으면 D, 그렇지 않으면 U입니다.
state := GetKeyState("RButton")  ; 우측 마우스 버튼.
state := GetKeyState("Joy2")  ; 첫 번째 조이스틱의 두 번째 버튼.

if GetKeyState("Shift")
    MsgBox 적어도 하나의 Shift 키가 눌려 있습니다.
else
    MsgBox Shift 키가 어느 쪽도 눌려 있지 않습니다.

state := GetKeyState("CapsLock", "T") ; CapsLock이 켜져 있으면 참, 그렇지 않으면 거짓입니다.

Remapping. (이 예제는 오로지 보여주기 위한 용도입니다. 내장된 리맵핑 특징을 사용하는 편이 더 쉽습니다.) 다음 핫키에서, NumpadAdd가 눌려 있는 동안 마우스 버튼도 눌려 있습니다. NumpadAdd를 마우스 버튼으로 변신시키는 효과가 있습니다. 이 방법을 사용하면 사용자가 키나 버튼을 누르고 있는 동안 행위를 반복할 수 있습니다.

*NumpadAdd::
MouseClick, left,,, 1, 0, D  ; 왼쪽 마우스 버튼을 누르고 있습니다.
Loop
{
    Sleep, 10
    if !GetKeyState("NumpadAdd", "P")  ; 키를 놓았습니다. 그래서 회돌이를 빠져 나옵니다.
        break
    ; ... 여기에 반복하고 싶은 행위를 삽입하십시오.
}
MouseClick, left,,, 1, 0, U  ; 마우스 버튼을 뗍니다.
return

조이스틱 축 위치에 따라 조이스틱 버튼의 행위를 다르게 만듭니다.

joy2:: 
JoyX := GetKeyState("JoyX")
if (JoyX > 75)
    MsgBox Action #1 (조이스틱이 오른쪽으로 기운 동안 버튼이 눌렸습니다).
else if (JoyX < 25)
    MsgBox Action #2 (조이스틱이 왼쪽으로 기운 동안 버튼이 눌렸습니다).
else
    MsgBox Action #3 (조이스틱이 수평으로 가운데에 있는 동안 버튼이 눌렸습니다).
return

다른 예제들은 조이스틱 리맵핑 페이지와 Joystick-To-Mouse 스크립트를 참조하십시오.