编程改变键盘灯的简易方法

一个笔记本,大概是驱动安装不太对,numlock无法按下,所以它的UIO JKL M,. 这几个键全被当成小键盘的按键了。所以每次使用的时候还得拖个usb键盘,好麻烦。

我试了试,果然用按下Fn键的方法按动numlock不可行。不过,如果按住Fn,再按UIO等键的时候,却变回原先的键值。好奇怪。

第一反应是写个程序触发numlock,似乎不难吧。上网查了一下,做出如下代码:

procedure TForm1.Button2Click(Sender: TObject);
var
  KeyState : TKeyBoardState;
begin
  GetKeyboardState(KeyState);
  KeyState[VK_NUMLOCK] := 1;
  setKeyboardState(KeyState);
end;

运行后,似乎毫毛反应。

看一下API的说明,有这样一段话:

Remarks

Because the SetKeyboardState function alters the input state of the calling thread and not the global input state of the system, an application cannot use SetKeyboardState to set the NUM LOCK, CAPS LOCK, or SCROLL LOCK indicator lights on the keyboard.

原来不可以用SetKeyboardState来修改全局的指示灯啊。。。

明明有办法的。。。

这时想到用Sendkey。忽然想到autoit可以方便的实现功能的,试一下:

  send("{NUMLOCK}")

只一行语句,问题解决。。。

原文地址:https://www.cnblogs.com/anjo/p/1926928.html