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


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

Копирует состояние 256 виртуальных ключей в указанный буфер.

Синтаксис

BOOL GetKeyboardState(
  [out] PBYTE lpKeyState
);

Параметры

[out] lpKeyState

Тип: PBYTE

256-байтовый массив, который получает данные о состоянии для каждого виртуального ключа.

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

Тип: BOOL

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Приложение может вызвать эту функцию, чтобы получить текущее состояние всех виртуальных ключей. Состояние меняется, когда поток удаляет сообщения клавиатуры из очереди сообщений. Состояние не меняется, так как сообщения с клавиатуры отправляются в очередь сообщений потока и не изменяются по мере отправки сообщений с клавиатуры в очереди сообщений других потоков или извлечения из них. (Исключение: потоки, подключенные через AttachThreadInput , имеют одно и то же состояние клавиатуры.)

При возврате функции каждый элемент массива, на который указывает параметр lpKeyState , содержит данные о состоянии виртуального ключа. Если бит высокого порядка равен 1, ключ не работает; в противном случае он работает. Если клавиша является переключателем, например CAPS LOCK, то бит низкого порядка равен 1, если ключ переключается, и равен 0, если ключ не переключен. Бит низкого порядка не имеет смысла для ключей без переключения. Говорят, что переключатель переключается, когда он включен. Индикатор клавиши переключателя (если таковой имеется) будет включен, когда клавиша включена, и выключается, когда клавиша отключена.

Чтобы получить сведения о состоянии отдельного ключа, используйте функцию GetKeyState . Чтобы получить текущее состояние отдельной клавиши независимо от того, было ли получено соответствующее сообщение клавиатуры из очереди сообщений, используйте функцию GetAsyncKeyState .

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

VK_LSHIFT
VK_RSHIFT
VK_LCONTROL
VK_RCONTROL
VK_LMENU
VK_RMENU
 

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

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll
Набор API ext-ms-win-ntuser-rawinput-l1-1-0 (появилось в Windows 10 версии 10.0.14393)

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