加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:23:36 所属栏目:百科 来源:网络整理
导读:我有4个usb-serial转换器(Prolific)连接到usb集线器.当我查看设备管理器时,我会看到动态分配的Com编号.但是,在将集线器重新插入另一个USB端口或在系统重新启动之后,这些com号有时会发生变化.有没有办法为每个转换器更新这些数字而无需手动搜索这些数字?基本
我有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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读