c#自動獲取對應的串列埠
阿新 • • 發佈:2019-01-02
語言C# ,是根據裝置VID和PID匹配所對應的串列埠。也可以根據裝置的GUID匹配。
下面是具體實現返回類似字串“COM1”。註釋部分可以打印出該裝置的所有資訊,方便擴充套件。
/// <summary> /// VID+PID gets the serial port /// </summary> /// <returns></returns> private string searchDevicesRegistry() { string[] available_spectrometers = SerialPort.GetPortNames(); ManagementObjectCollection.ManagementObjectEnumerator enumerator = null; string commData = ""; ManagementObjectSearcher mObjs = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM WIN32_PnPEntity"); try { enumerator = mObjs.Get().GetEnumerator(); while (enumerator.MoveNext()) { ManagementObject current = (ManagementObject)enumerator.Current; if (Strings.InStr(Conversions.ToString(current["Caption"]), "(COM", CompareMethod.Binary) <= 0) { continue; } //foreach (var property in current.Properties) //{ // Console.WriteLine(property.Name + ":" + property.Value); //} if (current["DeviceID"].ToString().Equals(@"FTDIBUS\VID_0413+PID_6111+FTZ6XM7RA\0000"))) { commData = current["Name"].ToString().Substring(17,4); break; } } } finally { if (enumerator != null) { enumerator.Dispose(); } } return commData; }
‘裝置管理器‘裡察看USB裝置屬性的PID和VID,也可以百度科普一下,多學一點是好的。
這是動態庫
using System.IO.Ports;
using System.Management;
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;
題外話:專案需要寫了一個獲取串列埠的方法。當時困擾了好久,看了一些技術帖總結了這個方法。看到很多有償的技術分享,所以你懂得...(經過努力後實現)深知開發遇到技術困難無法解決時的痛苦,不是不能解決而是現有知識儲備不夠。所以我為身邊的你貢獻一點熱。