Поделиться через


Функция GetAsyncKeyState (winuser.h)

Определяет, находится ли ключ вверх или вниз во время вызова функции, и указывает, нажимается ли ключ с момента предыдущего вызова GetAsyncKeyState.

Синтаксис

SHORT GetAsyncKeyState(
  [in] int vKey
);

Параметры

[in] vKey

Тип: int

Код виртуального ключа. Дополнительные сведения см. в разделе "Коды виртуальных ключей".

Для указания определенных ключей можно использовать константы слева и справа. Дополнительные сведения см. в разделе "Примечания".

Возвращаемое значение

Тип: SHORT

Если указанный ключ в данный момент отключен, задается наиболее значительный бит возвращаемого значения. Так как наиболее значимым битом является бит знака, отрицательное значение указывает на то, что ключ в настоящее время вниз.

Для обратной совместимости задается наименьший бит, если указанный ключ был нажат с момента последнего предыдущего вызова в сеансе к GetAsyncKeyState для этого ключа, но значение является ненадежным. (См. примечания.)

Все остальные биты результата зарезервированы и должны игнорироваться.

Возвращаемое значение равно нулю, если вызов завершается ошибкой. Причины сбоя:

  • Текущий рабочий стол не является активным рабочим столом.
  • Изоляция привилегий пользовательского интерфейса (UIPI) запрещает вызову потока доступа к потоку переднего плана.
  • Поток переднего плана принадлежит другому процессу, и вызывающий поток не имеет DESKTOP_HOOKCONTROL или DESKTOP_JOURNALRECORD доступ к рабочему столу.

Замечания

Функция GetAsyncKeyState работает с кнопками мыши. Однако он проверяет состояние физических кнопок мыши, а не на логических кнопках мыши, с которыми сопоставлены физические кнопки. Например, вызов GetAsyncKeyState(VK_LBUTTON) всегда возвращает состояние левой физической кнопки мыши независимо от того, сопоставляется ли она с левой или правой логической кнопкой мыши. Вы можете определить текущее сопоставление физических кнопок мыши с логическими кнопками мыши, вызвав GetSystemMetrics(SM_SWAPBUTTON)значение TRUE, если кнопки мыши были переключены.

Хотя наименьший значительный бит возвращаемого значения указывает, нажимается ли ключ с момента последнего запроса, из-за предупреждающего многозадачности Windows другой приложение может вызывать GetAsyncKeyState и получать бит "недавно нажаты" вместо приложения. Поведение наименьшего значительного значения возвращаемого значения сохраняется для совместимости с 16-разрядными приложениями Windows (которые не являются предварительными) и не должны полагаться на них, так как они могут сообщать о ложных отрицательных данных.

Константы кода виртуального ключа можно использовать VK_SHIFT, VK_CONTROL и VK_MENU в качестве значений для параметра vKey . Это дает состояние клавиш SHIFT, CTRL или ALT без различия между левым и правым.

В качестве значений vKey можно использовать следующие константы кода виртуального ключа, чтобы различать экземпляры этих ключей слева и справа.

Code Meaning
VK_LSHIFT Клавиша shift влево.
VK_RSHIFT Клавиша shift вправо.
VK_LCONTROL Клавиша левого элемента управления.
VK_RCONTROL Клавиша правого элемента управления.
VK_LMENU Клавиша левого меню.
VK_RMENU Клавиша правого меню.
 

Эти константы слева и справа доступны только при вызове функций GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState и MapVirtualKey.

Example

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
    BOOL considerSafeMode = FALSE;

    // If the user holds the CTRL key while the app is launching,
    // then offer to enter Safe Mode.
    if (GetAsyncKeyState(VK_CONTROL) < 0)
    {
        considerSafeMode = TRUE;
    }

    ...
}

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
Header winuser.h (включая Windows.h)
Library User32.lib
DLL User32.dll

См. также