首先说一下在Unity中对串口的支持并不是很好,要实现的是根据设备名称获取串口号。经过很多尝试,借鉴了下面的两篇文章最后决定在NET环境中单独制作一个exe用来获取设备名称对应的串口号,然后在Unity环境中进行调用。

https://www.jianshu.com/p/a995310be470

https://blog.csdn.net/jayyf/article/details/49179921

一、Net环境中根据设备名称获取串口号的代码

using System.Management;
using System;
using System.Collections.Generic;class Program
{static void Main(string[] args){//这里要交互所以不能用WriteLine后面会有换行符Console.Write(GetComNum());}/// <summary>/// Get the target com num./// </summary>/// <returns></returns>public static int GetComNum(){int comNum = -1;string[] strArr = GetHarewareInfo(HardwareEnum.Win32_PnPEntity, "Name");foreach (string s in strArr){//Console.WriteLine(s);if (s.Length >= 23 && s.Contains("CH340")){int start = s.IndexOf("(") + 3;int end = s.IndexOf(")");comNum = Convert.ToInt32(s.Substring(start + 1, end - start - 1));}}return comNum;}/// <summary>/// Get the system devices information with windows api./// </summary>/// <param name="hardType">Device type.</param>/// <param name="propKey">the property of the device.</param>/// <returns></returns>private static string[] GetHarewareInfo(HardwareEnum hardType, string propKey){List<string> strs = new List<string>();try{using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType)){var hardInfos = searcher.Get();foreach (var hardInfo in hardInfos){if (hardInfo.Properties[propKey].Value != null){String str = hardInfo.Properties[propKey].Value.ToString();strs.Add(str);}}}return strs.ToArray();}catch{return null;}finally{strs = null;}}//end of func GetHarewareInfo()./// <summary>/// 枚举win32 api/// </summary>public enum HardwareEnum{// 硬件Win32_Processor, // CPU 处理器Win32_PhysicalMemory, // 物理内存条Win32_Keyboard, // 键盘Win32_PointingDevice, // 点输入设备,包括鼠标。Win32_FloppyDrive, // 软盘驱动器Win32_DiskDrive, // 硬盘驱动器Win32_CDROMDrive, // 光盘驱动器Win32_BaseBoard, // 主板Win32_BIOS, // BIOS 芯片Win32_ParallelPort, // 并口Win32_SerialPort, // 串口Win32_SerialPortConfiguration, // 串口配置Win32_SoundDevice, // 多媒体设置,一般指声卡。Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP)Win32_USBController, // USB 控制器Win32_NetworkAdapter, // 网络适配器Win32_NetworkAdapterConfiguration, // 网络适配器设置Win32_Printer, // 打印机Win32_PrinterConfiguration, // 打印机设置Win32_PrintJob, // 打印机任务Win32_POTSModem, // MODEMWin32_POTSModemToSerialPort, // MODEM 端口Win32_DesktopMonitor, // 显示器Win32_DisplayConfiguration, // 显卡Win32_DisplayControllerConfiguration, // 显卡设置Win32_VideoController, // 显卡细节。Win32_VideoSettings, // 显卡支持的显示模式。// 操作系统Win32_TimeZone, // 时区Win32_SystemDriver, // 驱动程序Win32_DiskPartition, // 磁盘分区Win32_LogicalDisk, // 逻辑磁盘Win32_LogicalDiskToPartition, // 逻辑磁盘所在分区及始末位置。Win32_LogicalMemoryConfiguration, // 逻辑内存配置Win32_PageFile, // 系统页文件信息Win32_PageFileSetting, // 页文件设置Win32_BootConfiguration, // 系统启动配置Win32_ComputerSystem, // 计算机信息简要Win32_OperatingSystem, // 操作系统信息Win32_StartupCommand, // 系统自动启动程序Win32_Service, // 系统安装的服务Win32_Group, // 系统管理组Win32_GroupUser, // 系统组帐号Win32_UserAccount, // 用户帐号Win32_Process, // 系统进程Win32_Thread, // 系统线程Win32_Share, // 共享Win32_NetworkClient, // 已安装的网络客户端Win32_NetworkProtocol, // 已安装的网络协议Win32_PnPEntity,//all device}}

二、Unity中调用生成的exe,获取端口号,主要需要注意这里当串口号大于10时的处理,借鉴了下面文章中的处理方式。

https://blog.csdn.net/iothua/article/details/51657106

private string GetPortName(){try{Process processGetPortName = new Process();ProcessStartInfo startInfo = new ProcessStartInfo(Environment.CurrentDirectory+"\\GetPortNum.exe");processGetPortName.StartInfo = startInfo;processGetPortName.StartInfo.UseShellExecute = false;processGetPortName.StartInfo.RedirectStandardOutput = true;processGetPortName.Start();string output = processGetPortName.StandardOutput.ReadToEnd();if (int.Parse(output) > 10)output = "\\\\?\\" + "COM" + output;elseoutput = "COM" + output;return output;}catch (Exception ex){UnityEngine.Debug.Log("出错原因:" + ex.Message);return "";}}

Unity中根据设备名称获取串口号相关推荐

  1. C# 获取本机连接的所有 串口设备名称 与 串口号

    代码: class Program{static void Main(string[] args){GetComList();}private static void GetComList(){try ...

  2. Unity中的设备唯一码GAID、IDFA,用于广告跟踪和数据统计

    当前可以唯一标识设备,用于程序的数据收集和统计的ID ANDROID: 国外: GAID:广告id,即Google Advertising ID(GAID),是由Google Play service ...

  3. Android开发中根据图片名称获取在drawable中的ID

    在Android开发中图片资源是必不可少的,如ImageView需要图片资源的ID,ImageButton需要资源的ID等等,我们可以用R.drawable.XXX可以获取图片资源的ID,但是,在某些 ...

  4. 罗技LG29在unity中的所有按键获取(包括换挡 brake档把 脚踏板油门刹车)

    using UnityEngine;using System.Collections;using UnityStandardAssets.CrossPlatformInput;/// <summ ...

  5. Word控件Spire.Doc 【段落处理】教程(十七):在 C#、VB.NET 中的 Word 中按样式名称获取段落

    通过使用Spire.Doc,您不仅可以检索Word文档中所有段落的样式名称,还可以获取具有特定样式名称的段落.这在您需要获取标题.标题 1.副标题等中的文本时尤其有用. Spire.Doc for.N ...

  6. 在Unity中,PlayableBehaviour如何获取片段的开始和结束时间?

    在Unity的timeline相关自定义代码编写中,有时候会需要在PlayableBehaviour中获取TimeClip的开始和结束时间,通过PlayableBehaviour提供的接口我们会发现找 ...

  7. linux中的设备名称和设备号,linux中的设备名称和设备号

    2.现代Linux设备号命名规则: 现代Linux要管理的设备种类非常丰富,包括硬盘.U盘.打印机等各种设备.我们仍以硬盘为目标来说明设备命名规则.linux将硬盘分为两类:第一类是传统的IDE硬盘, ...

  8. linux中的设备名称和设备号

    看赵炯博士的<linux 0.11 源代码注释>已经两三周了,从今天起开始将一些个人总结和感悟分小标题写出来,聊作记忆以供后来查看. 在linux0.11源码的 /linux/boot/b ...

  9. Unity中在运行时获取AnimationClip中的关键帧信息

    今天遇到一个制作动画路径的问题如下: 从题中可以看出物体路径受指定动画操控,我们不能改变控制方式,因此问题的重点在于如何从AnimationClip中获得位置每帧物体XYZ移动的位置信息,有了位置信息 ...

最新文章

  1. opengl之自动纹理
  2. 大型网站架构的发展演变过程
  3. 无表头单链表的总结----输出链表
  4. 数据库如何进行索引优化
  5. 框架详解_详解:python Web框架flask表单实现(建议收藏)
  6. mysql定义语言_MySQL基础(一)--数据定义语言DDL
  7. 计算机学生选课系统毕业论文,学生选课管理系统论文
  8. 人人开源vue无法启动
  9. Pico Neo3 4VR一体机破解版游戏资源合集安装包下载及安装教程分享
  10. $(...).dataTable is not a function
  11. python 二维转一维_Numpy 将二维图像矩阵转换为一维向量的方法
  12. 成立一年,手游交叉推广交易社区Chartboost已有8000款游戏加入
  13. 【SONY PS2模拟器】[PCSX2 V0.93 R7完美教程]+最新版模拟器
  14. Hypervisor介绍
  15. vue + elementui table 列内容相同 自动合并单元格 完整代码
  16. 在CentOS下安装clickhouse
  17. 虚拟机登陆界面一直转圈
  18. 华为手机助手安卓版_手机资料恢复助手app下载-手机资料恢复助手app安卓版下载v1.0...
  19. 【工具】MATLAB一键转为python
  20. 双路由设置上网与共享

热门文章

  1. 深度解密:软银孙正义如何成为美国硅谷最有权势之人
  2. JS 逆向的时候 Python 如何调用 JavaScript 代码?「建议收藏哦!」
  3. 计算机视觉——三维视觉 I
  4. 学校校园学生寝室管理查寝打分系统 毕业设计毕设源码毕业论文开题报告参考(4)网站和学生功能
  5. 城市与地区级联选择框的使用
  6. 联想计算机phoenix award bios,BIOS设置图解教程(AWARD,AMI和PHOENIX)
  7. YottaChain数据加密的可靠性和安全性有多高?
  8. 18.NET高级开发之ORM-EF6
  9. 记第一次爬虫 python3.6+pyquery
  10. 从安格视,安维到安尼