다음을 통해 공유


GetAsyncKeyState 함수(winuser.h)

함수가 호출될 때 키가 위쪽 또는 아래쪽인지 여부와 GetAsyncKeyState에 대한 이전 호출 후에 키가 눌렸는지 여부를 결정합니다.

구문

SHORT GetAsyncKeyState(
  [in] int vKey
);

매개 변수

[in] vKey

형식: int

가상 키 코드입니다. 자세한 내용은 가상 키 코드를 참조하세요.

왼쪽 및 오른쪽 구분 상수를 사용하여 특정 키를 지정할 수 있습니다. 자세한 내용은 설명 섹션을 참조하세요.

반환 값

형식: SHORT

함수가 성공하면 반환 값은 GetAsyncKeyState에 대한 마지막 호출 이후 키를 누른 상태인지 여부와 키가 현재 위쪽 또는 아래쪽인지 여부를 지정합니다. 가장 중요한 비트가 설정되면 키가 다운되고 가장 중요한 비트가 설정되면 GetAsyncKeyState에 대한 이전 호출 후에 키를 눌렀습니다. 그러나 이 마지막 동작에 의존해서는 안 됩니다. 자세한 내용은 설명을 참조하세요.

반환 값은 다음 경우에 대해 0입니다.

  • 현재 데스크톱이 활성 데스크톱이 아닙니다.
  • 포그라운드 스레드는 다른 프로세스에 속하며 데스크톱은 후크 또는 저널 레코드를 허용하지 않습니다.

설명

GetAsyncKeyState 함수는 마우스 단추에서 작동합니다. 그러나 물리적 단추가 매핑되는 논리적 마우스 단추가 아닌 실제 마우스 단추의 상태를 확인합니다. 예를 들어 GetAsyncKeyState(VK_LBUTTON) 호출은 왼쪽 또는 오른쪽 논리 마우스 단추에 매핑되는지 여부에 관계없이 항상 왼쪽 실제 마우스 단추의 상태를 반환합니다. 를 호출 GetSystemMetrics(SM_SWAPBUTTON)하여 물리적 마우스 단추를 논리 마우스 단추에 매핑하는 시스템의 현재 매핑을 확인할 수 있습니다.

마우스 단추를 교환한 경우 TRUE를 반환합니다.

반환 값의 최소 비트는 Windows의 선점적 멀티태스킹 특성으로 인해 마지막 쿼리 이후 키를 누른 상태인지 여부를 나타내지만 다른 애플리케이션 은 GetAsyncKeyState 를 호출하고 애플리케이션 대신 "최근에 누른" 비트를 받을 수 있습니다. 반환 값의 최소 비트 동작은 16비트 Windows 애플리케이션과의 호환성을 위해 엄격하게 유지되며(선점적이지 않음) 의존해서는 안 됩니다.

vKey 매개 변수의 값으로 VK_SHIFT, VK_CONTROLVK_MENU 가상 키 코드 상수를 사용할 수 있습니다. 이렇게 하면 왼쪽과 오른쪽을 구분하지 않고 Shift, Ctrl 또는 ALT 키의 상태가 제공됩니다.

다음 가상 키 코드 상수를 vKey 의 값으로 사용하여 해당 키의 왼쪽 인스턴스와 오른쪽 인스턴스를 구분할 수 있습니다.

코드 의미
VK_LSHIFT 왼쪽 시프트 키입니다.
VK_RSHIFT 오른쪽 시프트 키.
VK_LCONTROL 왼쪽 제어 키입니다.
VK_RCONTROL 오른쪽 제어 키입니다.
VK_LMENU 왼쪽 메뉴 키입니다.
VK_RMENU 오른쪽 메뉴 키입니다.
 

이러한 왼쪽 및 오른쪽 구분 상수는 GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyStateMapVirtualKey 함수를 호출할 때만 사용할 수 있습니다.

while (GetMessage(&msg, nullptr, 0, 0))
{
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    switch (msg.message)
    {
    case WM_KEYDOWN:
        if ((GetAsyncKeyState(VK_ESCAPE) & 0x01) && bRunning)
        {
            Stop();
        }
        break;
    }
}

GitHub의 Windows 클래식 샘플 예제입니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 winuser.h(Windows.h 포함)
라이브러리 User32.lib
DLL User32.dll

추가 정보