在 C# 中设置 USB 键盘状态
Posted
技术标签:
【中文标题】在 C# 中设置 USB 键盘状态【英文标题】:Set USB keyboard status in C# 【发布时间】:2017-02-14 15:51:23 【问题描述】:我需要将输出报告发送到 USB“键盘”,但 Windows 在 USB 设备上使用 CreateFile 时返回无效句柄。这是因为 Windows 以独占模式打开设备。如何仍将输出报告发送到键盘?
我已经研究过 HidP_Xxxx 函数,但它们都需要 CreateFile 以有效的句柄成功。此外,直接输入的 SendDeviceData 文档说没有设备可以使用它,而是使用 HID。该页面上指向 HID 文档的链接已损坏。
【问题讨论】:
键盘,无论是否 USB,都是输入设备,而不是输出设备。您希望如何对键盘进行任何输出?另外,代码在哪里? USB 键盘支持编写带有 LED 状态的报告。我试图与之交谈的“键盘”实际上是一个条形码扫描仪,文档说明发送 1 字节输出报告,其中 LED 状态位按特定顺序设置/清除。这是使条形码扫描仪进入正确模式所必需的。 尝试 HIDAPI:signal11.us/oss/hidapi @DavidGrayson HIDAPI 仍然需要能够使用 CreateFile 打开 USB 设备。这隐藏在 hid_open 调用中。尝试打开 USB 键盘类设备时 hid_open 将失败。见https://github.com/signal11/hidapi/issues/247 【参考方案1】:这可能是条形码扫描仪的驱动程序(.inf
文件)及其在注册表中设置的一些特定键的问题,请参阅以下链接
也许使用类似USBDeview
的程序来清理注册表并重新安装扫描程序(检查inf 文件中的AddReg
条目)或尝试删除独占访问 注册表项手动条码扫描器
此外,Windows 10 hidscanner.dll
似乎有问题 https://answers.microsoft.com/en-us/windows/forum/windows_10-hardware/pos-hid-barcode-scanner-drivers-being-deleted/206b5354-06e0-47cb-98b8-805f525e130e ,https://answers.microsoft.com/en-us/windows/forum/windows_10-hardware/windows-10-with-pos-hid-barcode-scanner/2adc8ea9-556c-4b85-98fe-3b625c37ab76
【讨论】:
条形码扫描仪作为 USB 键盘类设备连接到系统,并使用“无驱动”HID 设置。没有 .inf 文件可以纠正 Windows 独占访问 USB 键盘类设备的行为。对 USB 键盘类设备的独占访问被硬编码到 Windows 设备管理系统中。他们这样做是出于安全原因(即试图阻止键盘记录器打开另一个键盘的只读句柄)。以上是关于在 C# 中设置 USB 键盘状态的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式在系统偏好设置中设置 macOS 键盘快捷键?
键盘显示时在 UIViewController 中设置 Tableview y 位置
如何在 UIView 中设置滚动视图以向上滑动被键盘隐藏的文本字段?