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

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

大家好,又见面了,我是全栈君。

来源: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几。

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

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口号,达到了随便插哪个口程序都可以跑的目的。

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

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108728.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spssk均值聚类报告_K均值聚类

    spssk均值聚类报告_K均值聚类机器学习中的k均值聚类属于无监督学习,所谓k指的是簇类的个数,也即均值向量的个数。算法初始状态下,要根据我们设定的k随机生成k个中心向量,随机生成中心向量的方法既可以随机从样本中抽取k个样本作为中心向量,也可以将中心向量固定在样本的维度范围之内,避免中心向量过偏远离大多数样本点。然后每个样本点需要与k个中心向量分别计算欧氏距离,取欧氏距离最小的中心向量作为该样本点的簇类中心,当第一轮迭代完成之后,…

    2025年7月6日
    0
  • U盘启动和量产_u盘量产容量恢复

    U盘启动和量产_u盘量产容量恢复  今天装系统,光盘启动老是不行,心血来潮就想做一个U盘启动,刚好有个金士顿的Datatravalor16G的U盘,就下载USBBoot作启动盘,zip模式直接不行,HDD倒是可以格,格完后,就只有2G了。在系统管理里可以看到剩余的空间,但无法使用。  于是找芯片识别,找量产工具,完全不会用,试了2个小时,才找到门路:先用F1程序生成配置文件,其实就是U盘想做成什么样子,然后在量产工具中加载…

    2022年9月9日
    0
  • 在MT4上使用双线MACD指标源码

    在MT4上使用双线MACD指标源码MACD指标是股票交易中经典的一款技术分析指标,该指标由两条曲线和柱线组成。基本用法:MACD金叉:DIFF由下向上突破DEA,为买入信号。MACD死叉:DIFF由上向下突破DEA,为卖出信号。MACD绿转红:MACD值由负变正,市场由空头转为多头。MACD红转绿:MACD值正转负,市场多头转空头。DIFF与DEA均为正值,即都在零轴线以上时,大势属于多头市场,DIFF向上突破DEA,可以做买入信号。DIFF与DEA均为负值,即都在零轴线以下时,大势属于空头市场,DIFF向下跌破DEA,可做卖出信号。DE

    2022年5月7日
    97
  • AutoScaling 目标追踪伸缩规则概述「建议收藏」

    AutoScaling 目标追踪伸缩规则概述「建议收藏」AutoScaling 目标追踪伸缩规则概述

    2022年4月21日
    48
  • 培训java机构排行榜_北京java培训班哪家好

    培训java机构排行榜_北京java培训班哪家好要说国内的就业市场中,薪资高待遇好的当属Java软件开发岗位了,因Java软件开发的职业发展稳定获得了不少从业者的追捧。对于想要学习Java的同学来说,培训就成了进入这个行业的敲门砖,很多零基础不太懂这个行业的同学,想要找一家比较好的培训机构,都会在网络上搜索一些像“北京Java培训机构排名”这样的词,能够在其中得到一些参考,下面是通过行业口碑,Java就业率,诚信度,课程体系,Java师资,教学质量,授课方式等多方面得出的北京Java培训机构排名,参考意义很强。就算我们有了排名上的参考,也需.

    2022年10月3日
    0
  • JS : clearInterval()失效,无法暂停setInterval()的原因[通俗易懂]

    JS : clearInterval()失效,无法暂停setInterval()的原因[通俗易懂]环境:我在函数A调用函数B,函数B里写了setInterval()。原因:页面加载时我调用了2次函数A,导致调用了2次setInterval(),导致有setInterval_id有2个值。clearInterval()只关闭了其中一个setInterval_id,另一个setInterval_id还会启动setInterval()。改为只调用一次函数A即可。…

    2025年7月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号