Riepilogo
La documentazione per SetKeyboardState () dice correttamente che non è possibile usare questa API per attivare o disattivare i tasti BLOC NUM, BLOC MAIUSC e BLOC SCORR. È possibile usare keybd_event () per attivare o disattivare i tasti BLOC NUM, BLOC MAIUSC e BLOC SCORR in Windows NT. La stessa tecnica funziona per l'attivazione di BLOC MAIUSC e BLOC SCORR in Windows 95, ma non funzionerà per BLOC NUM.
Ulteriori informazioni
Il programma di esempio seguente disattiva la luce di blocco NUM se è disattivata. La funzione SetNumLock definita qui simula la pressione del tasto BLOC NUM, usando keybd_event () con una chiave virtuale di VK_NUMLOCK. Prende un valore booleano che indica se la luce deve essere disattivata (FALSE) o attivata (TRUE). La stessa tecnica può essere usata per il tasto BLOC MAIUSC (VK_CAPITAL) e per il tasto BLOC SCORR (VK_SCROLL).
Codice di esempio
/* 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 ); }