Povzetek
Dokumentacija za SetKeyboardState () pravilno pravi, da tega API-ja ne morete uporabiti za preklop tipk NUM LOCK, CAPS LOCK in SCROLL LOCK. Uporabite lahko keybd_event (), če želite preklopiti tipke NUM LOCK, CAPS LOCK in SCROLL LOCK v razdelku Windows NT. Ista tehnika deluje za preklapljanje med zaklepanjem CAPS LOCK in SCROLL LOCK v okviru sistema Windows 95, vendar ne bo delovalo za NUM LOCK.
Več informacij
Naslednji vzorčni program vklopi lučko NUM LOCK, če je izklopljena. Funkcija SetNumLock, opredeljena tukaj, simulira pritisk tipke NUM LOCK, pri tem pa uporabite keybd_event () z navideznim ključem VK_NUMLOCK. To je logična vrednost, ki označuje, ali naj bo lučka izklopljena (FALSE) ali vklopljena (TRUE). Isto tehniko lahko uporabite za tipko CAPS LOCK (VK_CAPITAL) in tipko SCROLL LOCK (VK_SCROLL).
Vzorčna koda
/* 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 ); }