獲取串口設備名稱 獲取設備管理器里的硬體名稱

来源:https://www.cnblogs.com/ChuanYangRiver/archive/2018/01/06/8214512.html
-Advertisement-
Play Games

效果如圖: 如果報錯: managementobjectsearcher 缺少using 為什麼已經引用了using System.Management 使用ManagementObjectSearcher時為什麼提示未引用空間 解決辦法: ...


 
簡介:在串口通信的程式中,如果PC上同時連接有多個串口,那麼從應用程式里打開串口時,就很難知道是哪一個串口,這時候就必須要通過設備管理器去查看串口名稱,這份代碼就是解決這個問題,調用系統api,讀取串口設備的名稱和串口號,不需要再從設備管理器里去查找串口。程式關鍵部分如下:
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Management;
  6 
  7 namespace StudentSerialPort
  8 {
  9     class GetHardName
 10     {
 11         /// <summary>
 12         /// 枚舉win32 api
 13         /// </summary>
 14         public enum HardwareEnum
 15         {
 16             // 硬體
 17             Win32_Processor, // CPU 處理器
 18             Win32_PhysicalMemory, // 物理記憶體條
 19             Win32_Keyboard, // 鍵盤
 20             Win32_PointingDevice, // 點輸入設備,包括滑鼠。
 21             Win32_FloppyDrive, // 軟盤驅動器
 22             Win32_DiskDrive, // 硬碟驅動器
 23             Win32_CDROMDrive, // 光碟驅動器
 24             Win32_BaseBoard, // 主板
 25             Win32_BIOS, // BIOS 晶元
 26             Win32_ParallelPort, // 並口
 27             Win32_SerialPort, // 串口
 28             Win32_SerialPortConfiguration, // 串口配置
 29             Win32_SoundDevice, // 多媒體設置,一般指音效卡。
 30             Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP)
 31             Win32_USBController, // USB 控制器
 32             Win32_NetworkAdapter, // 網路適配器
 33             Win32_NetworkAdapterConfiguration, // 網路適配器設置
 34             Win32_Printer, // 印表機
 35             Win32_PrinterConfiguration, // 印表機設置
 36             Win32_PrintJob, // 印表機任務
 37             Win32_TCPIPPrinterPort, // 印表機埠
 38             Win32_POTSModem, // MODEM
 39             Win32_POTSModemToSerialPort, // MODEM 埠
 40             Win32_DesktopMonitor, // 顯示器
 41             Win32_DisplayConfiguration, // 顯卡
 42             Win32_DisplayControllerConfiguration, // 顯卡設置
 43             Win32_VideoController, // 顯卡細節。
 44             Win32_VideoSettings, // 顯卡支持的顯示模式。
 45 
 46             // 操作系統
 47             Win32_TimeZone, // 時區
 48             Win32_SystemDriver, // 驅動程式
 49             Win32_DiskPartition, // 磁碟分區
 50             Win32_LogicalDisk, // 邏輯磁碟
 51             Win32_LogicalDiskToPartition, // 邏輯磁碟所在分區及始末位置。
 52             Win32_LogicalMemoryConfiguration, // 邏輯記憶體配置
 53             Win32_PageFile, // 系統頁文件信息
 54             Win32_PageFileSetting, // 頁文件設置
 55             Win32_BootConfiguration, // 系統啟動配置
 56             Win32_ComputerSystem, // 電腦信息簡要
 57             Win32_OperatingSystem, // 操作系統信息
 58             Win32_StartupCommand, // 系統自動啟動程式
 59             Win32_Service, // 系統安裝的服務
 60             Win32_Group, // 系統管理組
 61             Win32_GroupUser, // 系統組帳號
 62             Win32_UserAccount, // 用戶帳號
 63             Win32_Process, // 系統進程
 64             Win32_Thread, // 系統線程
 65             Win32_Share, // 共用
 66             Win32_NetworkClient, // 已安裝的網路客戶端
 67             Win32_NetworkProtocol, // 已安裝的網路協議
 68             Win32_PnPEntity,//all device
 69         }
 70         /// <summary>
 71         /// WMI取硬體信息
 72         /// </summary>
 73         /// <param name="hardType"></param>
 74         /// <param name="propKey"></param>
 75         /// <returns></returns>
 76         public static string[] MulGetHardwareInfo(HardwareEnum hardType, string propKey)
 77         {
 78 
 79             List<string> strs = new List<string>();
 80             try
 81             {
 82                 using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType))
 83                 {
 84                     var hardInfos = searcher.Get();
 85                     foreach (var hardInfo in hardInfos)
 86                     {
 87                         if(hardInfo.Properties[propKey].Value != null)
 88                         {
 89                             if (hardInfo.Properties[propKey].Value.ToString().Contains("COM"))
 90                             {
 91                                 strs.Add(hardInfo.Properties[propKey].Value.ToString());
 92                             }
 93                         }
 94                         
 95 
 96                     }
 97                     searcher.Dispose();
 98                 }
 99                 return strs.ToArray();
100             }
101             catch
102             {
103                 return null;
104             }
105             finally
106             { strs = null; }
107         }
108         //通過WMI獲取COM埠
109         /// <summary>
110         /// 串口信息
111         /// </summary>
112         /// <returns></returns>
113         public static string[] GetSerialPort()
114         {
115             return MulGetHardwareInfo(HardwareEnum.Win32_PnPEntity, "Name");
116         }
117 
118 
119 
120     }
121 }
使用方式:調用API "GetSerialPort"即可獲得設備列表,示意如下:
1 //通過WMI獲取COM埠
2             foreach (string portName in GetHardName.GetSerialPort())
3             {
4                 toolStripItemCollection.Add(portName);
5             }

效果如圖:

 

如果報錯:

managementobjectsearcher 缺少using

為什麼已經引用了using System.Management 使用ManagementObjectSearcher時為什麼提示未引用空間

解決辦法:

在項目》》添加引用....裡面引用System.Management 。 再using System.Management 就可以了

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 微信跳一跳輔助工具 準備工具 adb驅動 安卓手機 打開手機的調試模式 usb接好手機和電腦 PyCharm:全宇宙唯一一款專門用於Python開發IDE工具 實現原理: 獲取手機的實時的截圖 點擊起始位置和落地位置 技算兩個點的距離 計算按壓時間 發送按壓指令 重新刷新手機截圖 ...
  • 一:裝飾器 1 函數對象有一個__name__屬性,可以拿到函數的名字 上面的log,因為它是一個decorator,所以接受一個函數作為參數,並返回一個函數。我們要藉助Python的@語法,把decorator置於函數的定義處: 調用now()函數,不僅會運行now()函數本身,還會在運行now( ...
  • 一. 虛擬環境搭建 在開發中安裝模塊的方法: pip install 模塊名稱 之前我們安裝模塊都是直接在物理環境下安裝,這種安裝方法,後面一次安裝的會覆蓋掉前面一次安裝的。那如果一臺機器上面開發多個項目使用到不同版本的模塊呢?怎麼樣做才能不受版本影響!那麼需要用到虛擬環境,每個虛擬環境互相隔離,在 ...
  • 1、概念 1.0 線程的和進程的關係以及優缺點 windows系統是一個多線程的操作系統。一個程式至少有一個進程,一個進程至少有一個線程。進程是線程的容器,一個C#客戶端程式開始於一個單獨的線程,CLR(公共語言運行庫)為該進程創建了一個線程,該線程稱為主線程。例如當我們創建一個C#控制台程式,程式 ...
  • 相對之前發的日誌記錄來說,此類將程式記錄處理與寫磁碟操作分離,用戶代碼部分,將日誌放到隊列,並通知線程將日誌寫到文件: 1.公共類: using System;using System.IO;using System.Collections.Generic;using static System.C ...
  • 一.C#關鍵字擴充解釋: 1. new : 1)開闢空間 2)調用構造 3)實例化對象 2. this: 當前類的實例,用來區分入參和成員變數 3. void void修飾的方法表示返回值類型為空,並不代表沒有返回值 二.構造方法: 1.構造函數 特點: 方法名與類名相同 沒有返回值類型 主要完成對 ...
  • 這裡用的是SWT/JFace開發application中SWT自帶的org.eclipse.swt.ole.win32 包可以支持內嵌OLE和ActiveX。 具體用法如下: //創建一個OleFrame做為OLE(或ActiveX)的框架 OleFrame oleFrame = new OleFr ...
  • huanent.printer2.0是一個專註消費小票列印的類庫。擁有許多先進的特性例如居中列印、自動換行等特性,可以通過簡潔的代碼來列印出複雜的消費小票。huanent.printer通過MIT方式授權,可隨意用於商業用途,只要註明作者即可。 你可以通過github獲取源碼與提交bug:https ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...