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

简介: 来源:http://www.cnblogs.com/hshuzhao/p/4028856.html?utm_source=tuicool&utm_medium=referral 、情境: 做项目的时候要打开串口然后进行一些库函数的调用来操作目标板。

来源:http://www.cnblogs.com/hshuzhao/p/4028856.html?utm_source=tuicool&utm_medium=referral

、情境:

做项目的时候要打开串口然后进行一些库函数的调用来操作目标板。串口使用的是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口号,达到了随便插哪个口程序都可以跑的目的。

目录
相关文章
|
16天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
65 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
开发框架 算法 搜索推荐
C# .NET面试系列九:常见的算法
#### 1. 求质数 ```c# // 判断一个数是否为质数的方法 public static bool IsPrime(int number) { if (number < 2) { return false; } for (int i = 2; i <= Math.Sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } class Progr
58 1
|
1月前
|
并行计算 安全 Java
C# .NET面试系列四:多线程
<h2>多线程 #### 1. 根据线程安全的相关知识,分析以下代码,当调用 test 方法时 i > 10 时是否会引起死锁? 并简要说明理由。 ```c# public void test(int i) { lock(this) { if (i > 10) { i--; test(i); } } } ``` 在给定的代码中,不会发生死锁。死锁通常是由于两个或多个线程互相等待对方释放锁而无法继续执行的情况。在这个代码中,只有一个线程持有锁,且没有其他线程参与,因此不
105 3
|
3月前
|
Linux C# 开发工具
C#开源的一款友好的.NET SDK管理器
C#开源的一款友好的.NET SDK管理器
|
9天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
1月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
1月前
|
SQL 存储 关系型数据库
C# .NET面试系列十:数据库概念知识
#### 1. 为什么要一定要设置主键? 设置主键是数据库设计中的一个重要概念,有几个主要原因: 1、唯一性 ```c# 主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。如果没有主键或者主键不唯一,就可能出现数据混乱或错误。 ``` 2、查询性能 ```c# 数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。 ``` 3、关联性 ```c# 主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。 ``` 4、数据完
131 1
C# .NET面试系列十:数据库概念知识
|
1月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
174 2
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
63 0