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

Категория

Клавиатура