Функция SetKeyboardState
Declare Function SetKeyboardState Lib "user32" (lpKeyState As Byte) As Long
SetKeyboardState устанавливает состояние каждой клавиши на клавиатуре. Каждый элемент массива с 256 элементами получает информацию относительно виртуальной клавиши, чей код соответствует индексу элемента. Если бит &H1 установлен, то клавиша выключена. Если установлен бит &H80, то клавиша нажата. Информация о клавиатуре, установленная этой функцией не обязательно изменяет состояния клавиш, имеющие отношение к системе в целом
- lpKeyState
- Массив байтов с 256 элементами, который получает информацию состояния для всех виртуальных клавиш. Каждая клавиша идентифицирована элементом, соответствующим коду виртуальной клавиши. Windows NT, 2000: В дополнение к виртуальным клавишам, массив также получает информацию, способную различать левый и правый клавиши Ctrl, Alt, и SHIFT, которые помещены в массив в следующих индексах:
- VK_LSHIFT = &HA0
- Левый Shift
- VK_RSHIFT = &HA1
- Правый Shift
- VK_LCONTROL = &HA2
- Левый Ctrl
- VK_RCONTROL = &HA3
- Правый Ctrl
- VK_LMENU = &HA4
- Левый Alt
- VK_RMENU = &HA5
- Правый Alt
Пример
' Включим или выключим лампы-индикаторы
' NUM LOCK, CAPS LOCK и SCROLL LOCK на клавиатуре
Dim o As OSVERSIONINFO
Dim NumLockState As Boolean
Dim ScrollLockState As Boolean
Dim CapsLockState As Boolean
o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)
' NumLock
NumLockState = keys(VK_NUMLOCK)
If NumLockState <> True Then ' включаем
' для платформы Win95/98/Me достаточно вызова функции SetKeyboardState
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_NUMLOCK) = 1
SetKeyboardState keys(0)
' для платформы WinNT используем другую функцию
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
' Имитируем нажатие клавиши
keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
' Имитируем отпускание клавиши
keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY _
Or KEYEVENTF_KEYUP, 0
End If
End If
' Аналогично поступаем с другими индикаторами
CapsLockState = keys(VK_CAPITAL)
If CapsLockState <> True Then
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_CAPITAL) = 1
SetKeyboardState keys(0)
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY _
Or KEYEVENTF_KEYUP, 0
End If
End If
ScrollLockState = keys(VK_SCROLL)
If ScrollLockState <> True Then
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_SCROLL) = 1
SetKeyboardState keys(0)
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY _
Or KEYEVENTF_KEYUP, 0
End If
End If
Смотри также
GetKeyboardState
Категория
Клавиатура