Propriedade KeyPreview do form = True
em (GENERAL) do form inclua a seguinte instrução:
Option Explicit
Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Private Declare Function MapVirtualKey Lib "user32" _
Alias "MapVirtualKeyA" _
(ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Private Const KEYEVENTF_KEYUP = &H2
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const VK_NUMLOCK = &H90
Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
'--------------------------------------------------------
Insira um botão de comando e inclua o seguinte código:
Private Sub cmdNumLock_Click()
Dim kbArray As KeyboardBytes
GetKeyboardState kbArray
'If kbArray.kbByte(VK_NUMLOCK) = 0 Then NUMLOCK is OFF
'If kbArray.kbByte(VK_NUMLOCK) = 1 Then NUMLOCK is ON
If kbArray.kbByte(VK_NUMLOCK) = 1 Then
' This code simply toggles the CAPSLOCK Key state
Call keybd_event(vbKeyNumlock, _
MapVirtualKey(vbKeyNumlock, 0), _
KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call keybd_event(vbKeyNumlock, MapVirtualKey(vbKeyNumlock, 0), _
KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
End If
Exit Sub
End Sub
Prontinho, o código do botão acima pode ser colocado em um timer para que ele faça a verificação constante e mantenha a tecla sempre acionada