windows - 如何在 Windows 下设置 USB 键盘的 LED

标签 windows winapi keyboard usb 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 增强型键盘并表示它是“仿真”。但是 Windows HID 仿真不支持 SendDeviceData。

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

如何在不更改键盘状态的情况下更改键盘 LED?

最佳答案

使用 HID Descriptor Tool查看HID Report Descriptors对于每个键盘。键盘需要实现用法页面 8(“LED”)。否则,可能无法通过 USB 接口(interface)控制这些指示器,或者可能以非标准方式完成控制。

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

关于windows - 如何在 Windows 下设置 USB 键盘的 LED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5375268/

相关文章:

windows - Windows 上的 Conda 自定义 channel

C、Windows API递归导航子目录

c++ - 如何打印 HKEY 或将其转换为字符串?

iphone - 数字键盘在完成显示时丢失自定义 UIButton 的奇怪问题

python - pygame 中的键盘布局感知组合

windows - 我如何撤销 IntersectClipRect 的效果?

windows - 在 VB.NET 中将焦点更改到另一个窗口

java - 用于打开 Java 应用程序并插入文本的脚本

c++ - 从 RichEdit 复制编号列表?

c++ - SFML 2.0 中的关键重复