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几。

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

时间: 2024-11-10 00:32:04

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

如何在service中获取camera中的视频数据

问题描述 如何在service中获取camera中的视频数据 小弟是Android新手,最近遇到一点困难,困难具体如下,请各位大哥赐教: 我想在service中获取camera组件,然后把从camera中获取的数据通过 socket发送到电脑端. 现在主要的问题是不知道怎么获取camera中的数据,surfaceView貌似行不通 解决方案 用void onPreviewFrame(byte[] data, Camera camera),data就是预览图像的数据一般情况下是YUV格式. 解决方

服务器-关于java网络编程中获取输入流中数据的问题?

问题描述 关于java网络编程中获取输入流中数据的问题? //服务器端接收消息的类.定制端口号为8888 serviceSocket = new ServerSocket(10000); //获取socket.这个方法是阻塞式的 socket = serviceSocket.accept(); inputStream = socket.getInputStream(); byte buf[] = new byte[1024]; int len = 0; len =inputStream.read

extjs4-etxjs 中获取pagingtoolbar中的分页参数

问题描述 etxjs 中获取pagingtoolbar中的分页参数 因现在有需要,在extjs中使用pagingtoolbar的分页参数参数(不是后台获取),如limit,start. 多次尝试依然没实现,求助各位帮帮忙. 解决方案 那个是store的对象. var store=yourgird.store; alert('页数:'+store.pageSize) alert('当前页:'+store.currentPage) 解决方案二: 如果你的数据是直接加载.可以用后台传的集合.total

spring-Struts 关于在jsp中获取 xxxAction中model值的问题

问题描述 Struts 关于在jsp中获取 xxxAction中model值的问题 如图: 问题 也在图上了 解决方案 解决了, 因为栈顶的模型此时是空的(oldmodel的引用指向了newmodel(仅仅是引用),所以为空),上面那种方法是手动设置oldModel.setXxxx(newModel.getXxxx()), 还可以用参数预处理那个栈paramsPrepareParamsStack,此外可以用刷新机制: 把 modelDriven的refreshModelBeforeResult属

PHP在弹框中获取foreach中遍历的id值并传递给地址栏

1.php有时候我们需要再弹框中获取foreach中遍历的数据(例如id),在弹框中点击按钮并传递给地址栏跳转.那么应该怎么做呢. 2. 点击取现按钮,如果没有设置密码->弹框 3. 点击去设置,把用户名通过地址栏传递给别的页面. 4.使用onclick事件,把参数charge传递给function函数.function为弹窗函数. 5. 把username值传递过来.并给"去设置"赋值herf属性. 6. <div class="mask" >&

JS中获取数据库中的值的方法

在项目中遇到一个问题,需要在JS中读取数据库中的值,然后再把值返回到页面中,解决方案如下:使用Ajax方法来实现,需要用到ajax.dll(一个ajax技术开发的帮助类库).   实施过程如下:     1.引用Ajax.dll     2.在App_Code写具体的方法,最好单独建立一个类文件,然后写具体方法.       复制代码 代码如下: public class AjaxMethod www.jb51.net {     public AjaxMethod()     {       

asp中获取内容中所有图片与获取内容中第一个图片的代码_应用技巧

复制代码 代码如下: '===================================== '获取内容中所有图片 '===================================== Function Get_ImgSrc(ByVal t0) Dim t1,Regs,Matches,Match t1="" IF Not(IsNull(t0) Or Len(t0)=0) Then Set Regs=New RegExp Regs.Pattern="<img

在DataGrid控件中获取数据项中各列的数据内容

datagrid|datagrid控件|数据 在DataGrid控件中,一般只是在绑定列或模版列中进行数据显示. 在编写DataGrid控件(控件名为dg1)的事件的处理方法时,通常希望获取数据项某列的数据. 除了SelectedInexChanged事件外,其它事件的处理方法的参数e都是DataGridCommandEventArgs类的实例.通过e实例,可以获取引发事件的数据项中数据. 1.获取绑定列中的数据 1)处于非编辑状态.或者数据项处于编辑状态但该绑定列只读   e.Item.Cel

怎么在Global.asax中获取Session中的值

问题描述 我在想在Application_BeginRequest里监控用户的都提交了什么,但是就是没法获取Session存的用户名,大神们这该怎么做 解决方案 解决方案二:参考解决方案三:实现下System.Web.SessionState.IReadOnlySessionState接口试试解决方案四:对,要实现sessionstate接口才行解决方案五:使用Session判断用户登录状态记录用户//将用户名存储到Session中protectedvoidButton1_Click(objec