1. 程式人生 > >c#自動獲取對應的串列埠

c#自動獲取對應的串列埠

語言C# ,是根據裝置VIDPID匹配所對應的串列埠。也可以根據裝置的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;

題外話:專案需要寫了一個獲取串列埠的方法。當時困擾了好久,看了一些技術帖總結了這個方法。看到很多有償的技術分享,所以你懂得...(經過努力後實現)深知開發遇到技術困難無法解決時的痛苦,不是不能解決而是現有知識儲備不夠。所以我為身邊的你貢獻一點熱。