1、情境:
做项目的时候要打开串口然后进行一些库函数的调用来操作目标板。串口使用的是usb转串口,板子插进拔出的,每次都使用不一样的usb口,debug的时候懒得每次改com口,又不想在UI上加上一个选择
com口的combox,于是就使用了下面这个方法。
2、环境:
Win764、vs2010
3、目标:
获取下图的设备到底使用的是com几。
4、source codery>
1///<summary>2///Get the target com num.3///</summary>4///<returns></returns>5publicstaticintGetComNum()6{7intcomNum = -1;8string[] strArr = GetHarewareInfo(HardwareEnum.Win32_PnPEntity,"Name");9foreach(stringsinstrArr)10{11Debug.WriteLine(s);1213if(s.Length >=23&& s.Contains("CH340"))14{15intstart = s.IndexOf("(") +3;16intend = s.IndexOf(")");17comNum = Convert.ToInt32(s.Substring(start +1, end - start -1));18}19}2021returncomNum;2223}2425///<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>31privatestaticstring[] GetHarewareInfo(HardwareEnum hardType,stringpropKey)32{3334List<string> strs =newList<string>();35try36{37using(ManagementObjectSearcher searcher =newManagementObjectSearcher("select * from"+hardType))38{39varhardInfos =searcher.Get();40foreach(varhardInfoinhardInfos)41{42if(hardInfo.Properties[propKey].Value !=null)43{44String str =hardInfo.Properties[propKey].Value.ToString();45strs.Add(str);46}4748}49}50returnstrs.ToArray();51}52catch53{54returnnull;55}56finally57{58strs =null;59}60}//end of func GetHarewareInfo().6162///<summary>63///枚举win32 api64///</summary>65publicenumHardwareEnum66{67//硬件68Win32_Processor,//CPU 处理器69Win32_PhysicalMemory,//物理内存条70Win32_Keyboard,//键盘71Win32_PointingDevice,//点输入设备,包括鼠标。72Win32_FloppyDrive,//软盘驱动器73Win32_DiskDrive,//硬盘驱动器74Win32_CDROMDrive,//光盘驱动器75Win32_BaseBoard,//主板76Win32_BIOS,//BIOS 芯片77Win32_ParallelPort,//并口78Win32_SerialPort,//串口79Win32_SerialPortConfiguration,//串口配置80Win32_SoundDevice,//多媒体设置,一般指声卡。81Win32_SystemSlot,//主板插槽 (ISA & PCI & AGP)82Win32_USBController,//USB 控制器83Win32_NetworkAdapter,//网络适配器84Win32_NetworkAdapterConfiguration,//网络适配器设置85Win32_Printer,//打印机86Win32_PrinterConfiguration,//打印机设置87Win32_PrintJob,//打印机任务88Win32_TCPipPrinterPort,//打印机端口89Win32_POTSModem,//MODEM90Win32_POTSModemToSerialPort,//MODEM 端口91Win32_DesktopMonitor,//显示器92Win32_DisplayConfiguration,//显卡93Win32_DisplayControllerConfiguration,//显卡设置94Win32_VideoController,//显卡细节。95Win32_VideoSettings,//显卡支持的显示模式。9697//操作系统98Win32_TimeZone,//时区99Win32_SystemDriver,//驱动程序100Win32_DiskPartition,//磁盘分区101Win32_LogicalDisk,//逻辑磁盘102Win32_LogicalDiskToPartition,//逻辑磁盘所在分区及始末位置。103Win32_LogicalMemoryConfiguration,//逻辑内存配置104Win32_PageFile,//系统页文件信息105Win32_PageFileSetting,//页文件设置106Win32_BootConfiguration,//系统启动配置107Win32_ComputerSystem,//计算机信息简要108Win32_OperatingSystem,//操作系统信息109Win32_StartupCommand,//系统自动启动程序110Win32_Service,//系统安装的服务111Win32_Group,//系统管理组112Win32_GroupUser,//系统组帐号113Win32_UserAccount,//用户帐号114Win32_Process,//系统进程115Win32_Thread,//系统线程116Win32_Share,//共享117Win32_NetworkClient,//已安装的网络客户端118Win32_NetworkProtocol,//已安装的网络协议119Win32_PnPEntity,//all device120}
6、结果:
正确获得对应的com口号,达到了随便插哪个口程序都可以跑的目的。