How to Activate CapsLock and NumLock from Code

Declarations

Add the following code into the declarations section of a module:

Public Const VK_CAPITAL = &H14

Public Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type

Public kbArray As KeyboardBytes

Public Declare Function GetKeyState Lib "user32" _ 
(ByVal nVirtKey As Long) As Long

Public Declare Function GetKeyboardState Lib "user32" _ 
(kbArray As KeyboardBytes) As Long 

Public Declare Function SetKeyboardState Lib "user32" _ 
(kbArray As KeyboardBytes) As Long

Code

On a form, add a 3 command buttons (cmdToggle, cmdTurnOn, cmdTurnOff) and a label (Label1). Add the following code to the form:

Private Sub Form_Load()
  If CapsLock() = 1 Then Label1 = "On" Else _
  Label1 = "Off"
End Sub

Private Sub cmdToggle_Click()
  GetKeyboardState kbArray
  kbArray.kbByte(VK_CAPITAL) = _
  IIf(kbArray.kbByte(VK_CAPITAL) = 1, 0, 1)
  SetKeyboardState kbArray

  Label1 = IIf(CapsLock() = 1, "On", "Off")
End Sub

Private Sub cmdTurnOn_Click()
  GetKeyboardState kbArray
  kbArray.kbByte(VK_CAPITAL) = 1
  SetKeyboardState kbArray

  Label1 = IIf(CapsLock() = 1, "On", "Off")
End Sub

Private Sub cmdTurnOff_Click()
  GetKeyboardState kbArray
  kbArray.kbByte(VK_CAPITAL) = 0
  SetKeyboardState kbArray

  Label1 = IIf(CapsLock() = 1, "On", "Off")
End Sub

Comments

The keyboard APIs for VB4-16 and VB3 do not support the byte data type.

By changing the Windows constant to Public Const VK_NUMLOCK = &H90, you can use the above to activate the NumLock key.


Funny T-Shirts | Discount Window Shades | Black Jack Game | Best Companies for Merchant Account | Michigan Foreclosures