Resumo
A documentação do setkeyboardstate () informa corretamente que você não pode usar essa API para alternar as teclas NUM LOCK, CAPS LOCK e SCROLL LOCK. Você pode usar keybd_event () para ativar as teclas NUM LOCK, CAPS LOCK e SCROLL LOCK no Windows NT. A mesma técnica funciona para alternar CAPS LOCK e SCROLL LOCK no Windows 95, mas não funcionará para NumLock.
Informações adicionais
O programa de exemplo a seguir ativa a luz de NumLock quando está desativada. A função setnumlock definida aqui simula o pressionamento da tecla NUM LOCK, usando keybd_event () com uma chave virtual de VK_NUMLOCK. Ele usa um valor booliano que indica se a luz deve ser desativada (falsa) ou ativada (TRUE). A mesma técnica pode ser usada para a tecla CAPS LOCK (VK_CAPITAL) e a tecla SCROLL LOCK (VK_SCROLL).
Código de amostra
/* 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 ); }