สรุป
เอกสารประกอบสำหรับ SetKeyboardState () ได้อย่างถูกต้องระบุว่าคุณไม่สามารถใช้ API นี้เพื่อสลับ NUM LOCK, CAPS lock และปุ่มล็อกการเลื่อน คุณสามารถใช้ keybd_event () เมื่อต้องการสลับ NUM LOCK, CAPS LOCK และปุ่มเลื่อนล็อกภายใต้ Windows NT เทคนิคเดียวกันทำงานสำหรับสลับ CAPS lock และ SCROLL LOCK ภายใต้ Windows ๙๕แต่จะไม่ทำงานสำหรับ NUM LOCK
ข้อมูลเพิ่มเติม
โปรแกรมตัวอย่างต่อไปนี้จะเปิดใช้งานไฟ NUM LOCK ถ้าปิดอยู่ ฟังก์ชัน SetNumLock ที่กำหนดไว้ที่นี่จะจำลองการกดแป้น NUM LOCK โดยใช้ keybd_event () ที่มีคีย์เสมือนของ VK_NUMLOCK โดยใช้ค่าบูลีนที่ระบุว่าควรปิดไฟ (FALSE) หรือเปิด (TRUE) คุณสามารถใช้เทคนิคเดียวกันสำหรับแป้น CAPS LOCK (VK_CAPITAL) และปุ่มเลื่อนล็อก (VK_SCROLL)
โค้ดตัวอย่าง
/* 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 ); }