1、情境:

做项目的时候要打开串口然后进行一些库函数的调用来操作目标板。串口使用的是usb转串口,板子插进拔出的,每次都使用不一样的usb口,debug的时候懒得每次改com口,又不想在UI上加上一个选择

com口的combox,于是就使用了下面这个方法。

2、环境:

win7 64、vs2010

3、目标:

获取下图的设备到底使用的是com几。

4、source codery>

  1         /// <summary>
  2         /// Get the target com num.
  3         /// </summary>
  4         /// <returns></returns>
  5         public static int GetComNum()
  6         {
  7             int comNum = -1;
  8             string[] strArr = GetHarewareInfo(HardwareEnum.Win32_PnPEntity, "Name");
  9             foreach (string s in strArr)
 10             {
 11                 Debug.WriteLine(s);
 12
 13                 if (s.Length >= 23 && s.Contains("CH340"))
 14                 {
 15                     int start = s.IndexOf("(") + 3;
 16                     int end = s.IndexOf(")");
 17                     comNum = Convert.ToInt32(s.Substring(start + 1, end - start - 1));
 18                 }
 19             }
 20
 21             return comNum;
 22
 23         }
 24
 25         /// <summary>
 26         /// Get the system devices information with windows api.
 27         /// </summary>
 28         /// <param name="hardType">Device type.</param>
 29         /// <param name="propKey">the property of the device.</param>
 30         /// <returns></returns>
 31         private static string[] GetHarewareInfo(HardwareEnum hardType, string propKey)
 32         {
 33
 34             List<string> strs = new List<string>();
 35             try
 36             {
 37                 using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType))
 38                 {
 39                     var hardInfos = searcher.Get();
 40                     foreach (var hardInfo in hardInfos)
 41                     {
 42                         if (hardInfo.Properties[propKey].Value != null)
 43                         {
 44                             String str = hardInfo.Properties[propKey].Value.ToString();
 45                             strs.Add(str);
 46                         }
 47
 48                     }
 49                 }
 50                 return strs.ToArray();
 51             }
 52             catch
 53             {
 54                 return null;
 55             }
 56             finally
 57             {
 58                 strs = null;
 59             }
 60         }//end of func GetHarewareInfo().
 61
 62     /// <summary>
 63     /// 枚举win32 api
 64     /// </summary>
 65     public enum HardwareEnum
 66     {
 67         // 硬件
 68         Win32_Processor, // CPU 处理器
 69         Win32_PhysicalMemory, // 物理内存条
 70         Win32_Keyboard, // 键盘
 71         Win32_PointingDevice, // 点输入设备,包括鼠标。
 72         Win32_FloppyDrive, // 软盘驱动器
 73         Win32_DiskDrive, // 硬盘驱动器
 74         Win32_CDROMDrive, // 光盘驱动器
 75         Win32_BaseBoard, // 主板
 76         Win32_BIOS, // BIOS 芯片
 77         Win32_ParallelPort, // 并口
 78         Win32_SerialPort, // 串口
 79         Win32_SerialPortConfiguration, // 串口配置
 80         Win32_SoundDevice, // 多媒体设置,一般指声卡。
 81         Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP)
 82         Win32_USBController, // USB 控制器
 83         Win32_NetworkAdapter, // 网络适配器
 84         Win32_NetworkAdapterConfiguration, // 网络适配器设置
 85         Win32_Printer, // 打印机
 86         Win32_PrinterConfiguration, // 打印机设置
 87         Win32_PrintJob, // 打印机任务
 88         Win32_TCPIPPrinterPort, // 打印机端口
 89         Win32_POTSModem, // MODEM
 90         Win32_POTSModemToSerialPort, // MODEM 端口
 91         Win32_DesktopMonitor, // 显示器
 92         Win32_DisplayConfiguration, // 显卡
 93         Win32_DisplayControllerConfiguration, // 显卡设置
 94         Win32_VideoController, // 显卡细节。
 95         Win32_VideoSettings, // 显卡支持的显示模式。
 96
 97         // 操作系统
 98         Win32_TimeZone, // 时区
 99         Win32_SystemDriver, // 驱动程序
100         Win32_DiskPartition, // 磁盘分区
101         Win32_LogicalDisk, // 逻辑磁盘
102         Win32_LogicalDiskToPartition, // 逻辑磁盘所在分区及始末位置。
103         Win32_LogicalMemoryConfiguration, // 逻辑内存配置
104         Win32_PageFile, // 系统页文件信息
105         Win32_PageFileSetting, // 页文件设置
106         Win32_BootConfiguration, // 系统启动配置
107         Win32_ComputerSystem, // 计算机信息简要
108         Win32_OperatingSystem, // 操作系统信息
109         Win32_StartupCommand, // 系统自动启动程序
110         Win32_Service, // 系统安装的服务
111         Win32_Group, // 系统管理组
112         Win32_GroupUser, // 系统组帐号
113         Win32_UserAccount, // 用户帐号
114         Win32_Process, // 系统进程
115         Win32_Thread, // 系统线程
116         Win32_Share, // 共享
117         Win32_NetworkClient, // 已安装的网络客户端
118         Win32_NetworkProtocol, // 已安装的网络协议
119         Win32_PnPEntity,//all device
120     }

6、结果:

正确获得对应的com口号,达到了随便插哪个口程序都可以跑的目的。

转载于:https://www.cnblogs.com/hshuzhao/p/4028856.html

C# .net中获取台式电脑中串口设备的名称相关推荐

  1. 在js中获取input中的value

    1.前提:我导入了这些js,不知道有没有依赖作用 <script type="text/javascript" src="js/jquery-3.3.1.js&qu ...

  2. Java中获取数据库中两个时间的相差秒数

    场景 Java中获取数据库中结束时间与开始时间相差的秒数. 实现 Long betweenTime=0l;betweenTime =((b.getFinishTime().getTime()-b.ge ...

  3. mysql java 获取周_Java中获取Mysql中datetime类型的数据

    由于Java中的日期类型只有Date类型,而Mysql中即有date型,又有datetime型,当我们想要在java中获取Mysql中datetime类型的数据或向Mysql数据库中插入datetim ...

  4. 视图中获取控制器中数据的方式

    在视图中获取控制器中数据的方式有两种: 一种是在控制器的操作中渲染视图时候分配模板数据,这种方式叫推送. 另外一种是在视图中手动获取控制器中的数据,包括控制器中的属性和方法及控制器id,通过$this ...

  5. PHP中获取数组中单列的值

    PHP中获取数组中单列的值如下: 利用PHP中的数组函数 array_column():返回数组中某个单列的值.(PHP 5.5+适用) 语法: array_column(array,column_k ...

  6. servlet和action中获取URL中的汉字(解决URL中汉字为乱码的问题) .

    2019独角兽企业重金招聘Python工程师标准>>> 最近在项目中又遇到一个小问题,通过HttpURLConnection来传递汉字时,服务端获取汉字参数时都为乱码,以下分别为在s ...

  7. 关于js中获取div中的数据

    原文地址为: 关于js中获取div中的数据 最近用js写了一个计算器的页面.基本上使用到了,ul  li的几点用法.用来布局,并且创造出了很不错的鼠标悬停效果. 关于从中学到的知识: document ...

  8. Android中获取手机中的联系人信息

    #Android中获取手机中的联系人信息 1.0.查看系统通讯录的表,表路径:data->data->com.android.providers.contacts->database ...

  9. server sql 数据总行数_SqlServer中获取数据库中每个表的行数

    CREATE TABLE #RowCounts(NumberOfRows BIGINT,TableName VARCHAR(128)) EXEC sp_MSForEachTable 'INSERT I ...

  10. html中获取modelandview中的json数据_从Bitmap中获取YUV数据的两种方式

    从Bitmap中我们能获取到的是RGB颜色分量,当需要获取YUV数据的时候,则需要先提取R,G,B分量的值,然后将RGB转化为YUV(根据具体的YUV的排列格式做相应的Y,U,V分量的排列) 所以这篇 ...

最新文章

  1. 死机一个月后,31岁的哈勃望远镜又复活了
  2. python解一元二次方程步骤-使用Python解一元二次方程!
  3. pythonATM自动存取款机7天密码保护
  4. 使用JFlex生成词法分析器 1:安装配置
  5. 服务器配置RAID5(3块硬盘做RAID5,另外再弄一块做数据冗余盘)
  6. 关于 RGB 的颜色认知
  7. applicationContext.xml文件配置模板
  8. python代码的注释只有一种方式、那就是使用#符号_知到智慧树营养与食疗学多选题答案...
  9. FreeRTOS可视化追踪软件 —— 破解Tracealyzer 4.2.12
  10. html5简单在线绘图,html5实现一个简单的在线画板
  11. 基于Linux的录像机:Neuros OSD
  12. 兼职招募!贪心科技招聘AI课程讲师,薪资超行业标准
  13. VS2022 安装 .NET Framework 4.0的方法
  14. HDU 4415 Assassin’s Creed(贪心)
  15. 手机号码11位以及格式验证规则
  16. 毕业设计游戏类网站设计静态页面基于html,div+css+jquery(含源码)
  17. 趣味Python——如何帮女朋友快速抢票
  18. 给SwipeRefreshLayout添加上拉加载更多功能
  19. 大数据系统开发综合实践(一)
  20. 小博无线认证无法连接服务器,路由器wan口认证失败

热门文章

  1. select框多级联动
  2. 用VC++ 6.0实现视频捕捉
  3. 使用 dom4j 解析 XML
  4. ASP.NET【1】
  5. C#开发高亮语法编辑器(一)——TextBox ,RichTextBox的局限性
  6. 现代软件工程团队项目贝塔阶段_大规模测试结果_2018.02.08
  7. loj 6085.「美团 CodeM 资格赛」优惠券
  8. 如何将自己在github写的android library开源,让大家依赖使用
  9. 【转】DataGridView之为每行前面添加序号
  10. 【小技巧】自定义asp.net mvc的WebFormViewEngine修改默认的目录结构