【问题标题】:Detect disconnect/loss of hardware components (Windows 7)检测硬件组件的断开/丢失 (Windows 7)
【发布时间】:2018-03-21 01:04:55
【问题描述】:

场景:关键的计算机系统通过标准 USB 键盘和鼠标由操作员控制。此外,还连接了一个 DVI 监视器以查看面向操作员的 GUI。计算机系统运行基于 Windows 7 Professional 或 Windows Embedded Standard 7(“系统软件”)的软 PLC 系统。

问题:是否有软件解决方案来检测 USB HID 设备(如键盘或鼠标)和单个 DVI 显示器的丢失(断开/故障)?这一点很重要,因为如果操作员无法对其进行操作或查看显示的内容,就无法再期望关键系统正常运行。

自己的考虑:这可能需要低级别的 WINAPI 调用,这很好。我认为 Windows 服务可能会不断寻求枚举键盘和显示器的数量 - 甚至可能通过型号或序列号来识别它们。如果此枚举和/或识别达到零或完全失败,系统软件当然必须快速且适当地做出反应(即进入失败模式或类似模式)。

据我所知,这是所有关键操作员控制系统的普遍问题。那么问题是:是否已经存在用于此的软件或硬件?

注意:操作员始终是人。

【问题讨论】:

  • RegisterDeviceNotification 不起作用吗?
  • @Dúthomhas 我不知道 :) 会吗?我以前从未使用过 WINAPI 调用(包括 Windows 服务)。但这似乎是相关的。非常欢迎您扩展答案。
  • github.com/Brandon-T/HDMI 我使用RegisterDeviceNotification 来检测连接到电视或显示器的 HDMI 电缆何时插入和拔出。对 GUID 稍作修改以检测 USB 和其他设备。
  • 我认为你希望在没有 Win32 专家的程序员的情况下解决这个问题是不现实的。
  • @DavidHeffernan 嗯,这可能是真的,虽然我可以自己施展魔法,只要有足够的时间和资源 :)

标签: winapi windows-7 usb


【解决方案1】:

唉,至于答案,这只不过是“阅读文档”加上一些链接......对不起。

首先,MSDN 文档。

我在 CodeProject.com 上找到了一个可以执行此操作的 C# 类;附带的文章很不错。

我承认我上一次做这样的事情是几年前的事了,而且只是为了通知 CD。此后我丢失了代码(我的主硬盘和备用硬盘在几天内相继出现故障,哈哈)。

【讨论】:

  • 这本质上是一个仅链接的答案,但它甚至不提供指向实际目标的链接。请参阅How to Answer,特别是:“鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及它为什么存在。始终引用最相关的部分重要链接,以防目标站点无法访问或永久离线。”
  • 这种注册设备通知的方法是否能够为特定类别的设备的枚举/列表连续池化?通知处理程序似乎只在设备事件发生时被调用(例如,USB 设备的移除/插入)。这理解正确吗?
  • 是的,您正在注册一个通知事件。
猜你喜欢
  • 2011-11-26
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 2012-11-12
  • 2010-09-24
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
相关资源
最近更新 更多