微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何区分usb-serial转换器?

我有4个usb-serial转换器(Prolific)连接到usb集线器.当我查看设备管理器时,我会看到动态分配的Com编号.但是,在将集线器重新插入另一个USB端口或在系统重新启动之后,这些com号有时会发生变化.有没有办法为每个转换器更新这些数字而无需手动搜索这些数字?基本上我想在我的C#项目中有一个方法,它会为每个转换器寻找一些唯一的ID,然后获得新的com号码.有没有办法做到这一点(尝试了一些wmi查询,但没有成功)?

今天我想到了一个解决方法.所以我有一个问题.如何获取有关USB集线器的信息?基本上我可以以某种方式找到我的USB集线器,然后检索有关连接到集线器端口设备的信息.然后通过wmi查询获取这些设备的com号将非常容易.我用USBView看到有可能获得这样的信息.我可以看到一棵树从根集线器开始 – >通用USB集线器 – >多产的USB到串行通信端口,但现在如何在代码中执行此操作.有任何想法吗?

解决方法

它的简单,通过使用win32本机调用,你可以得到,

我只是提供一部分代码来帮助你,

var guidComPorts = Guid.Empty;
        UInt32 dwSize;
        IntPtr hDeviceInfo;
        var buffer = new byte[512];
        var providerName = new[] { };
        var spddDeviceInfo = new SpDevinfoData();
        var bStatus = SetupDiClassGuidsFromName("Ports",ref guidComPorts,1,out dwSize);
        if (bStatus)
        {
            hDeviceInfo = SetupDiGetClassDevs(
                ref guidComPorts,(IntPtr)null,DigcfPresent | DigcfProfile);
            if (hDeviceInfo.ToInt32() != 0)
            {

                while (true)
                {
                    spddDeviceInfo.CbSize = Marshal.SizeOf(spddDeviceInfo);// IS IT THIS LINE WORK FOR 64 BIT                        
                    bStatus = SetupDiEnumDeviceInfo(hDeviceInfo,nDevice++,ref spddDeviceInfo);
                    break;
                }

            }


            return;
        }

    }

使用此代码……

查找友好名称,拆分字符串获取您要查找的确切端口.
我已经完成了它,它的工作正常,由于一些保密原因无法在这里提供完整的代码.

更多查找此链接

http://www.codeproject.com/KB/cs/HardwareHelper.aspx

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐