如何检测特定设备的存在

Posted

技术标签:

【中文标题】如何检测特定设备的存在【英文标题】:How to detect the presence of certain device 【发布时间】:2012-01-29 18:29:23 【问题描述】:

在 C# 应用程序中,有哪些好方法可以检测是否存在连接到计算机的特定设备?当然,以编程方式。我需要支持 Windows XP 和 7。

背景

我收到了一个巨大的 C# 应用程序,它使用了一些连接的设备。这些设备是定制硬件,不能在没有软件的情况下使用。当 C# 应用程序启动时,它会搜索此类连接的设备并在适当的时候与它们进行通信。可以连接多个设备。我还没有查看搜索设备的源代码。这些设备通过 USB 或串行电缆插入 PC。它们在设备管理器中显示为 COM 端口。有时,PC 和设备之间可能存在 USB 集线器或串口转 USB 转换器。

当设备连接了某个 USB 集线器,或者使用了某个串口转 USB 转换器时,有时软件无法正确检测到该设备。有时它因 PC 而异。我们不确定它是否会导致某些驱动程序。

我被告知要研究设备搜索算法,如果可能的话,提出更好的解决方案并替换当前的实现。我以前没有做过这类任务,我需要了解 Windows 如何在后台管理设备。

如何在 C# 中搜索特定的连接设备?有哪些好的做法以及我应该注意或避免什么?

【问题讨论】:

也许这篇文章很有趣:***.com/questions/68749/… 和 developerfusion.com/article/84338/making-usb-c-friendly 您可以使用 WMI 等枚举所有连接的 (usb) 设备。据我所知,它们的工作速度很慢。不过可能有更好的方法。 ***.com/questions/3331043/… 【参考方案1】:

您可以在注册表中找到所有设备:HKLM/CurrentControlSet/Enum (http://msdn.microsoft.com/en-us/library/windows/hardware/ff546173(v=vs.85).aspx)

但是串口会有问题。您无法确定哪个设备连接到串行端口。它可以是手机、调制解调器、鼠标、您的设备、另一个自定义设备等。为了确保它是您的设备连接到给定的串行端口,您必须尝试与之通信。如果它以正确的方式响应 - 那么是的,它就是您的设备。

由于有这么多与串行设备一起工作的程序要求用户手动选择连接设备的串行端口。

更新:

另外一个关于枚举串口的链接:http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/afb62e84-53e5-4f17-ba91-8de15c4c2e38/

【讨论】:

您提供的链接适用于 windows CE。你能提供一个windows xp/7的链接吗?谢谢。我在 msdn 中通过快速搜索找不到它。

以上是关于如何检测特定设备的存在的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 iOS App 是由特定用户(不是在特定设备上)首次启动的?

如何检测 WiFi 网络中是不是存在设备?

linux中如何检测设备驱动模块是否存在

使用 JavaScript,如何检测访问者的设备上是不是存在三星 Galaxy 商店

如何检查文件是不是存在于android设备的特定文件夹中

如何以正确的方式检测 Android 设备?