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


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

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

Синтаксис

SHORT GetAsyncKeyState(
  [in] int vKey
);

Параметры

[in] vKey

Тип: int

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

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

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

Тип: SHORT

Если функция выполняется успешно, возвращаемое значение указывает, была ли клавиша нажата с момента последнего вызова GetAsyncKeyState и находится ли клавиша в данный момент вверх или вниз. Если задан самый значительный бит, клавиша не работает, а если задан наименьший значимый бит, клавиша была нажата после предыдущего вызова GetAsyncKeyState. Однако не следует полагаться на это последнее поведение; Дополнительные сведения см. в разделе Примечания.

Возвращаемое значение равно нулю в следующих случаях:

  • Текущий рабочий стол не является активным
  • Поток переднего плана принадлежит другому процессу, и рабочий стол не разрешает перехватчик или запись журнала.

Комментарии

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

возвращает значение TRUE, если кнопки мыши были перемещены.

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

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

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

Код Значение
VK_LSHIFT Клавиша shift влево.
VK_RSHIFT Клавиша shift вправо.
VK_LCONTROL Левая клавиша управления.
VK_RCONTROL Клавиша правого элемента управления.
VK_LMENU Клавиша меню слева.
VK_RMENU Клавиша правого меню.
 

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

Пример

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;
    }
}

Пример из классических примеров Windows на сайте GitHub.

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll

См. также раздел