´ Declaraciones API para el estado de las teclas.
Declare Sub GetKeyboardState Lib "USER32" (lpKeyState As Any)
Declare Sub SetKeyboardState Lib "USER32" (lpKeyState As Any)
´ El Indice para NumLock es de 256-bytes en el array de lpKeyState.
Const VK_NUMLOCK = vbKeyNumLock
´ Retorna el estado de la tecla NumLock: True = On, False = Off
Property Get NumLock() As Boolean
´ Crea el array para el estado de la tecla.
´ (256 bytes = 128 enteros)
Dim lpbKeyState(128) As Integer
´ Obtiene el estado de la tecla.
GetKeyboardState lpbKeyState(0)
´ Chequea los elementos del array VK_NUMLOCK.
If (lpbKeyState(VK_NUMLOCK / 2)) Then
NumLock = True
Else
NumLock = False
End If
End Property
´ Cambia el estado de la tecla NumLock: True = on, False = off
Property Let NumLock(bState As Boolean)
Dim lpbKeyState(128) As Integer
GetKeyboardState lpbKeyState(0)
´ Si el estado actual es el mismo que bState, no cambia nada.
´ then no change needed.
If lpbKeyState(VK_NUMLOCK / 2) And bState Then Exit Property
´ Si es distinto establece el valor del array.
If bState Then
lpbKeyState(VK_NUMLOCK / 2) = 1
Else
lpbKeyState(VK_NUMLOCK / 2) = 0
End If
´ Establece el estado de la tecla.
SetKeyboardState lpbKeyState(0)
End Property
Sub UseNumLock()
´ Obtiene la propiedad.
MsgBox Keyboard.NumLock
´ Establece la propiedad.0