如何在Windows下USB键盘的LED

mar*_*tin 5 windows keyboard usb winapi led

我正在尝试设置USB键盘的键盘LED.我已经尝试/了解以下内容:

  1. 要设置PS/2键盘LED,您可以使用CreateFile("\\.\ Keybd",GENERIC_WRITE,0,0,OPEN_EXISTING,0,0); DeviceIoControl(hKeybd,IOCTL_KEYBOARD_SET_INDICATORS ......

  2. 要设置真正符合HID标准的键盘的LED,您可以使用DirectInput,SendDeviceData和使用页面8.

  3. 您可以使用SendInput/keybd_event.但这也会改变国家.因此,当您在用户输入时使用此方法更改CAPS LOCK时,他/她将获得大写和小写字母:-)

当我用两个键盘调查方法2时,SendDeviceData函数总是返回E_NOTIMPL.似乎很多USB键盘制造商都依赖内置的HID驱动程序.在这种情况下,HID驱动程序报告键盘作为PC增强型键盘ans表示它是"仿真".但Windows HID仿真不支持SendDeviceData.

所以我怀疑必须有另一种设置键盘LED的方法.Windows必须与USB键盘通话才能设置LED :-)

有什么想法如何更改键盘LED而不改变键盘状态?

Jud*_*den 2

使用HID 描述符工具查看每个键盘的HID 报告描述符。键盘需要实现使用第 8 页(“LED”)。否则,可能无法通过 USB 接口控制这些指示器,或者可能以非标准方式完成。

或者,您可以尝试使用keybd_event设置特殊按键状态,也许 Windows 会自动为您切换 LED。