Podsumowanie
Dokumentacja dotycząca SetKeyboardState () poprawnie informuje, że nie można użyć tego interfejsu API w celu przełączenia klawiszy NUM LOCK, CAPS LOCK i SCROLL LOCK. Za pomocą keybd_event () można przełączać klawisze NUM LOCK, CAPS LOCK i SCROLL LOCK w obszarze Windows NT. Ta sama technika działa w przypadku przełączenia klawisza CAPS LOCK i SCROLL LOCK w systemie Windows 95, ale nie będzie działać w przypadku klawisza NUM LOCK.
Więcej informacji
Poniższy przykładowy program włącza funkcję NUM LOCK zapala się, jeśli jest wyłączona. Funkcja setnumlock zdefiniowana w tym miejscu symuluje naciśnięcie klawisza NUM LOCK przy użyciu keybd_event () z kluczem wirtualnym VK_NUMLOCK. Przyjmuje wartość logiczną wskazującą, czy światło powinno być wyłączone (FAŁSZ), czy włączone (prawda). Ta sama technika może być używana w przypadku klawisza CAPS LOCK (VK_CAPITAL) i klawisza SCROLL LOCK (VK_SCROLL).
Przykładowy kod
/* 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 ); }