一般来说串口号为COM1 --- COM9 但我想通过下面代码进行获取  /// <summary>
        /// 获取PDA的端口号,并保存到ComboBox里面
        /// </summary>
        private void GetPdaSocket()
        {
            try
            {
                // 从 \\driver\\builtin\\   HKLM\Drivers\BuiltIn\Serial  HKEY_LOCAL MACHINE\Drivers\BuiltIn
                RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("\\Drivers\\BuiltIn");
                if (keyCom != null)
                {
                    string[] sSubKeys = keyCom.GetValueNames();
                    // 下拉框数据清空
                    this.cbxGPSConf.Items.Clear();
                    this.cbxGPSConf.Items.Add(String.Empty);
                    foreach (string sName in sSubKeys)
                    {
                        string sValue = (string)keyCom.GetValue(sName);
                        this.cbxGPSConf.Items.Add(sValue);
                    }
                }
                else {
                    MessageBox.Show("aaaaaaaasdfww");
                }
             
            }
            catch(Exception ex)
            {
                  // 系统异常信息
                MessageBox.Show(ex.ToString());
            }       
        }但是获取不到咯,是不是路径写的有问题啊,高手来看看

解决方案 »

  1.   

    "获取PDA串口" ……
    算我自己看错了。
    你自己看看这个注册表项有没有数据吧
      

  2.   


    问题在PDA 没找到类似于regedit的命令,不会看注册表咯
      

  3.   


    /// <summary>
            /// 枚举当前系统的串口设备
            /// </summary>
            /// <returns>返回名称列表</returns>
            public static string[] EnumSystemDevice()
            {
                List<string> deviceList = new List<string>();
                if (System.Environment.OSVersion.Platform == PlatformID.WinCE)
                {
                    RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Drivers\BuiltIn\", false);                string[] strKeys = key.GetSubKeyNames();
                    foreach (string strKey in strKeys)
                    {
                        RegistryKey subKey = Registry.LocalMachine.OpenSubKey(@"Drivers\BuiltIn\" + strKey, false);
                        if (subKey != null)
                        {
                            object maskValue = subKey.GetValue("Prefix");
                            if (maskValue != null)
                            {
                                if ((maskValue as string) == "COM")
                                {
                                    object strSerialIndex = subKey.GetValue("Index");
                                    if (strSerialIndex != null)
                                    {
                                        if (deviceList.Contains(string.Format("COM{0}:", strSerialIndex.ToString())))
                                        {
                                            continue;
                                        }
                                        deviceList.Add(string.Format("COM{0}:", strSerialIndex.ToString()));
                                    }
                                }
                            }
                        }
                    }
                }
                else//pc
                {
                    RegistryKey key = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DEVICEMAP\SERIALCOMM", false);
                    string[] valueNames = key.GetValueNames();
                    foreach (string valueName in valueNames)
                    {
                        deviceList.Add(key.GetValue(valueName).ToString());
                    }
                }
                return deviceList.ToArray();
            }
      

  4.   

    EnumSystemDevice返回的就是可用串口的string[]了。你
    string[] ports = EnumSystemDevice();
    foreach(string port in ports)
    {
        combobox1.Items.Add(port);
    }就可以,顶多倒序一下。
      

  5.   

    我这个方法可以跨平台的支持wince和pc都能得到有效串口。
      

  6.   

    using System;
    using System.IO.Ports;namespace SerialPortExample
    {
        class SerialPortExample
        {
            public static void Main()
            {
                // Get a list of serial port names.
                string[] ports = SerialPort.GetPortNames();            Console.WriteLine("The following serial ports were found:");            // Display each port name to the console.
                foreach(string port in ports)
                {
                    Console.WriteLine(port);
                }            Console.ReadLine();
            }    }
    }
      

  7.   

    谢谢 wyz&xyl ,还有回帖的朋友们啦,我试试先
      

  8.   

                foreach (string s in SerialPort.GetPortNames())
                {
                    comboBox1.Items.Add(s);
                }
      

  9.   

      可以咯,非常感谢wyz&xyl , 也谢谢大家非常感谢!!!!!!!!!!
    我准备把分的大头给wyz&xyl  ,如果还有人想拿分的话,请到
    http://topic.csdn.net/u/20081223/10/a9a21553-75de-4fd8-88a1-da8d03554514.html  100分帖
    http://topic.csdn.net/u/20081222/14/c1ff705a-4be2-435d-a754-2d8198b79b77.html  20分帖 (当时忘改分了)