.net獲取串口列表

//方法一
            String[] Str2 = System.IO.Ports.SerialPort.GetPortNames();
            if (Str2.Length > 0)
            {
                for (int k = 0; k < Str2.Length; k++)
                {
                    comboBoxEdit1.Properties.Items.Add(Str2[k]);
                }
            }
            //方法二
            String[] Str2 = Gprs.GetSerialPortNames();
            if (Str2.Length > 0)
            {
                for (int k = 0; k < Str2.Length; k++)
                {
                    comboBoxEdit1.Properties.Items.Add(Str2[k]);
                }
            }
            //方法三
            RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");
            if (keyCom != null)
            {
                string[] sSubKeys = keyCom.GetValueNames();
                comboBoxEdit1.Properties.Items.Clear();
                foreach (string sName in sSubKeys)
                {
                    string sValue = (string)keyCom.GetValue(sName);
                    comboBoxEdit1.Properties.Items.Add(sValue);
                }
            }


其中方法二的方法不是.net自帶的需要自己寫:

public string[] GetSerialPortNames()
        {
            string[] ports = null;
            List<string> portsList = new List<string>();
            uint HKEY_LOCAL_MACHINE = 0x80000002;
            int hKey = -1;
            int ret = RegOpenKey(HKEY_LOCAL_MACHINE, @"Hardware\DEVICEMAP\SERIALCOMM", ref hKey);
            try
            {
                if (ret == 0)
                {
                    int index = 0;
                    int BufferSize = 255;
                    int ERROR_NO_MORE_ITEMS = 259;
                    string valueName = "".PadRight(BufferSize, ' ');
                    int valueNameLength = BufferSize;
                    int valueLength = BufferSize;
                    string value = "".PadRight(BufferSize, ' ');
                    while (RegEnumValue(hKey, index, ref valueName, ref valueNameLength, 0, 0, ref value, ref valueLength) != ERROR_NO_MORE_ITEMS)
                    {
                        if (valueLength > 0)
                        {
                            if (value[valueLength - 1] == 0)
                                valueLength -= 1;
                            portsList.Add(value.Substring(0, valueLength));
                        }
                        index += 1;
                        valueName = "".PadRight(BufferSize, ' ');
                        valueNameLength = BufferSize;
                        valueLength = BufferSize;
                    }
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                if (ret == 0)
                    RegCloseKey(hKey);
            }
            if (portsList.Count == 0)
                ports = new string[0];
            else
                ports = portsList.ToArray();
            return ports;
        }

這裏的三個方法第一個使用的是.net自帶的類進行函數調用,第二個是使用win32 的api方法,第三個是讀取註冊表信息。
發佈了27 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章