Shrnutí
Dokumentace pro SetKeyboardState () správně říká, že toto rozhraní API nemůžete použít k přepínání kláves NUM LOCK, CAPS LOCK a SCROLL LOCK. Pomocí keybd_event () můžete v systému Windows NT přepínat klávesy NUM LOCK, CAPS LOCK a SCROLL LOCK. Stejný postup je vhodný pro přepnutí CAPS LOCK a SCROLL LOCK v rámci systému Windows 95, ale nefunguje pro funkci NUM LOCK.
Další informace
V následujícím ukázkovém programu se zapnutí funkce NUM LOCK zapne, pokud je vypnutá. Funkce SetNumLock, kterou tady definujete, simuluje stisknutím klávesy NUM LOCK klávesu keybd_event () s virtuálním klíčem VK_NUMLOCK. Přebírá booleovskou hodnotu, která označuje, jestli má být světlo vypnuté (FALSE) nebo zapnuté (pravda). Stejnou techniku lze použít pro klávesu CAPS LOCK (VK_CAPITAL) a klávesu SCROLL LOCK (VK_SCROLL).
Ukázkový kód
/* 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 ); }