C# SerialPort.GetPortNames获取不到USB转串口号
用C#自带的GetPortNames(),有些可能获取不到,例如USB转串口的。可以考虑用windows api实现
//枚举系统中的串口
private void EnumComportfromReg(ComboBox Combobox)
{
Combobox.Items.Clear();
///定义注册表子Path
string strRegPath = @"Hardware\\DeviceMap\\SerialComm";
///创建两个RegistryKey类,一个将指向Root Path,另一个将指向子Path
RegistryKey regRootKey;
RegistryKey regSubKey;
///定义Root指向注册表HKEY_LOCAL_MACHINE节点
regRootKey = Registry.LocalMachine;
///Registry枚举类提供了以下几种
/*
Registry.ClassesRoot-------------->指向注册表HKEY_CLASSES_ROOT节点
Registry.CurrentConfig-------------->指向注册表HKEY_CURRENT_CONFIG节点
Registry.CurrentUser-------------->指向注册表HKEY_CURRENT_USER节点
Registry.DynData-------------->指向注册表HKEY_DYN_DATA节点(动态注册表数据)
Registry.LocalMachine-------------->指向注册表HKEY_LOCAL_MACHINE节点
Registry.PerformanceData-------------->指向注册表HKEY_PERFORMANCE_DATA节点
Registry.Users-------------->指向注册表HKEY_USERS节点
*/
regSubKey = regRootKey.OpenSubKey(strRegPath);
string[] strCommList = regSubKey.GetValueNames();
foreach (string VName in strCommList)
{
//向listbox1中添加字符串的名称和数据,数据是从rk对象中的GetValue(it)方法中得来的
Combobox.Items.Add(regSubKey.GetValue(VName));
}
if (Combobox.Items.Count > 0)
Combobox.SelectedIndex = 0;
///关闭
regSubKey.Close();
regRootKey.Close();
}