c# - 如何检测某个设备的存在

标签 c# windows hardware

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

背景

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

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

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

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

最佳答案

您可以在注册表中找到所有设备: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/

关于c# - 如何检测某个设备的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8666148/

相关文章:

c# - c# 中正确的队列线程技术?

c++ - 在Windows中初始化静态全局变量时new返回NULL?

iphone - 耳机/麦克风插孔的带宽

assembly - 磁盘 IO 操作在内核级程序集中通常如何看待?

c# - 使用 xamarin 从现有 wpf 程序创建 Linux 应用程序

c# - 如何通过从另一个表单调用它来将数据库中的数据显示到另一个表单

python - 检查 Windows 上是否有任何设备正在播放声音 python

c# - XML字符串反序列化为c#对象

c# - C#-将参数约束为Type的实例

c++ - 如何确定特定驱动器的类型?