在C#应用程序中,有哪些好方法可以检测连接到计算机的某些设备的存在?当然是以编程方式。我需要支持Windows XP和7。
背景
我已经获得了一个使用某些连接设备的巨大C#应用程序。这些设备是定制硬件,并非设计用于没有软件。当C#应用程序启动时,它会搜索此类连接的设备并在适当时与它们通信。可以有多个连接的设备。我没有查看搜索设备的源代码。使用USB或串行电缆将设备插入PC。它们在设备管理器中显示为COM端口。有时PC和设备之间可能有USB集线器或串口转USB转换器。
当设备与某个USB集线器连接或使用某些串口转USB转换器时,软件有时无法正常检测到设备。有时它因PC而异。我们不确定是否会导致一些司机。
我被告知要研究设备搜索算法,如果可能的话,提出更好的解决方案并替换当前的实现。我以前没有完成这类任务,我需要了解Windows如何管理设备。
如何在C#中搜索特定的连接设备?什么是一些好的做法,我应该注意或避免什么?
答案 0 :(得分:3)
您可以在注册表中找到所有设备:HKLM / CurrentControlSet / Enum(http://msdn.microsoft.com/en-us/library/windows/hardware/ff546173(v=vs.85).aspx)
但是串口会出现问题。您无法确定哪个设备连接到串行端口。它可以是手机,调制解调器,鼠标,您的设备,另一个自定义设备等。为了保证您的设备连接到给定的串行端口,您必须尝试与之通信。如果它以适当的方式响应 - 那么是的,它就是你的设备。
由于许多程序与串行设备一起使用,要求用户手动选择连接设备的串口。
UPD:
关于枚举串口的另一个链接:http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/afb62e84-53e5-4f17-ba91-8de15c4c2e38/