BYTE keyState[256];
::GetKeyboardState(keyState);
keyState[VK_NUM_LOCK]|=1;      //设为ON,否则用下句
//keyState[VK_NUM_LOCK]&=0;    //设为OFF  
::SetKeyboardState(keyState);

解决方案 »

  1.   

    sorry, 写错了,设为OFF那句应为:
    keyState[VK_NUM_LOCK]&=0Xf0;    //设为OFF
      

  2.   

    To happylaodu: SetKeyboardState()只能改变当前进程中的键盘状态,并没能改变LED灯的状态。谢谢您。
      

  3.   

    请高手指点.由于刚注册到CSDN,分数只有这么多了,非常抱歉!
      

  4.   

    SendMessage(WM_KEYDOWN,VK_CAPS_LOCK,NULL);
      

  5.   

    to vcmfc: SetKeyState()是MFC或C++的函数吗?SetKeyboardState()是无法解决我的问题的。
    to 111222: SendMessage()好象也无法直接控制的系统的键盘状态嘛。最多也是让自己进程接收到消息后改变自己进程中的键盘状态罢了。
      

  6.   

    我也提供一个歪招MSDN上提供了一段源码是模拟按键的,你照样模拟按一次NUMLOCK
    在kb_event函数说明的后面
      

  7.   

    其实MSDN上面说得很清楚,keybd_event()在NT和2000下模拟按键可控制三个LED灯,但在98下就不能控制NUM LOCK灯,而只能控制另外两个LED了。所以keybd_event()照样无法解决我的问题。
      

  8.   

    SetKeyState()是win api,实在不行用keybd_event来模拟按键,楼上的说错了函数.
      

  9.   

    你的竟然比我快!,keybd_event俺是没试过!
      

  10.   

    说错了,没有SetKeyState,  可查一下MSDN中的GetKeyState(),它有一个对应函数!