Функция 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 |