摘要
SetKeyboardState ()的文档中正确指出,您无法使用此 API 来切换 NUM LOCK、CAPS LOCK 和 SCROLL LOCK 键。你可以使用 keybd_event ()在 Windows NT 下切换 NUM LOCK、CAPS LOCK 和 SCROLL LOCK 键。 相同的技术可用于在 Windows 95 下切换 CAPS LOCK 和滚动锁,但它不会对 NUM LOCK 有效。
更多信息
下面的示例程序将在 NUM LOCK 灯关闭时将其打开。 此处定义的 SetNumLock 函数模拟按 NUM LOCK 键,使用 keybd_event ()和 VK_NUMLOCK 的虚拟键。 它采用一个布尔值,用于指示是否应关闭光(FALSE)或 on (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 ); }