Resumen
La documentación de SetKeyboardState () indica correctamente que no puede usar esta API para activar o desactivar las teclas BLOQ NUM, Bloq Mayús y Bloq Despl. Puede usar keybd_event () para alternar entre las teclas BLOQ NUM, Bloq Mayús y Bloq Despl en Windows NT. La misma técnica funciona para activar o desactivar las teclas Bloq Mayús y Bloq Despl en Windows 95, pero no funciona con BLOQ NUM.
Más información
El siguiente programa de ejemplo activa la luz BLOQ NUM activada si está desactivada. La función SetNumLock definida aquí simula la pulsación de la tecla BLOQ NUM, con keybd_event () y una clave virtual de VK_NUMLOCK. Toma un valor booleano que indica si la luz debe desactivarse (FALSE) o activarse (TRUE). Puede usar la misma técnica para la tecla Bloq Mayús (VK_CAPITAL) y la tecla Bloq Despl (VK_SCROLL).
Código de ejemplo
/* Compile options needed: */ #include <windows.h> void SetNumLock( BOOL bState ) { BYTE keyState[256]; GetKeyboardState((LPBYTE)&keyState); if( (bState && !(keyState[VK_NUMLOCK] & 1)) || (!bState && (keyState[VK_NUMLOCK] & 1)) ) { // Simulate a key press keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // Simulate a key release keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } void main() { SetNumLock( TRUE ); }