【问题标题】:How do I detect when a device attached to the system is ready for use?如何检测连接到系统的设备何时可以使用?
【发布时间】:2011-03-25 08:19:49
【问题描述】:

如果这与之前的问题相似,我很抱歉,但这是我刚刚注意到的。 我可以检测到我的设备何时连接到系统(通过 USB)并正确捕获消息,但是如果我拔下并重新插入设备,尝试通过 CreateFile() 函数访问设备总是返回错误:ERROR_GEN_FAILURE 31 (0x1F) 转换为 -连接到系统的设备无法运行,但是,这是在收到 @987654322 的 DBT_DEVICEARRIVAL 消息后尝试的@ own 定义表示“设备或媒体已插入并且现在可用”。我相信这里发生的事情是该错误与设备未准备好有关,即使它被报告为已准备好,因为如果我再次重新枚举系统上的设备列表,则设备已准备好。有没有其他人遇到并解决了这个问题?还是有什么我遗漏/忽略的东西?

【问题讨论】:

  • 您可能想提供有关您所谈论的操作系统的线索 - 这听起来像是某个版本的 Windows,但谁知道呢? (提示:标签在这里很有用)
  • 如果您拔掉插头并重新连接,它是否按预期工作?听起来您正在尝试使用旧参考,而实际上您在重新连接设备时需要一个新参考。
  • @Jay 你可能在这里找到了一些东西。如果我解决了,我会研究它并重新发布
  • 我认为没有办法绕过它。我认为系统设备列表需要重新枚举。

标签: c# windows-7 device hid


【解决方案1】:

IMO 处理这个问题的最简单方法是通过 WMI。

请看这里:http://dotnetslackers.com/community/blogs/basharkokash/archive/2008/02/06/usb-port-insert-remove-detection-using-wmi.aspx

我过去曾使用 WMI 进行 USB 驱动器检测,它非常简单,而且回调使事情变得非常干净

【讨论】:

  • 抱歉,我对 WMI 一无所知
  • 是的,我第一次累的时候也没有。但是,看看我发布的文章。很简单。
  • 对不起,这个回答不是真的。所描述的事件仅表明设备已连接到系统,并且可能可以从设备中检索到某些信息。但问题是“什么时候可以使用”。在我的选择中,这包括驱动程序已成功启动,以便我能够使用该设备。但 WMI 事件不包括此。例如:我连接了 FTDI 设备并使用 WMI 检测它何时连接。从触发 WMI 事件到我实际能够打开设备的时间大约持续 5 秒。
  • @0xBADF00D 那么您愿意发布正确答案吗?没有正确答案的评论说“这是错误的”没有多大帮助
  • @BradCunningham 问题是,我还没有找到解决方案。我很确定通过 WMI 是不可能的。目前我只是通过 WMI 检测更改,然后尝试使用该设备,如果它不起作用,我等待再试一次。也许有一些方法可以使用 PInvoke,但我还不知道。我的评论只是想给其他读者一个提示,给定的解决方案并不能完全解决问题。
猜你喜欢
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
相关资源
最近更新 更多