为什么WMI API和SerialPort类会返回端口com的默认配置?
问题描述:
我在设备管理器中更改了我的端口Com的配置,但是我的serialPort类和WMI API类Win32_SerialPortConfiguration保持返回此端口com的默认配置。 为什么WMI API和SerialPort类会返回端口com的默认配置?
答
using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Ports"))
{
foreach (string name in ndpKey.GetValueNames())
{
if (name.Remove(name.IndexOf(":")).ToLower().Equals(ComName.ToLower()))
{
var tempArray = ndpKey.GetValue(name).ToString().Split(',');
int speed = 0;
char parity = ' ';
int dataBits = 0;
Decimal stopBit = 0;
string parityS ="";
ComSettings.Add("Name", ComName);
if ((Int32.TryParse(tempArray[0], out speed)) && (Int32.TryParse(tempArray[2], out dataBits)) && (Decimal.TryParse(tempArray[3].Replace(".", ","), out stopBit)) && (Char.TryParse(tempArray[1], out parity)))
{
ComSettings.Add("Speed", speed);
ComSettings.Add("DataBits", dataBits);
ComSettings.Add("StopBits", stopBit);
switch (parity)
{
case 'e':
parityS = "Even";
break;
case 'n':
parityS = "None";
break;
case 'o':
parityS = "Odd";
break;
case 'm':
parityS = "Mark";
break;
case 's':
parityS = "Space";
break;
}
ComSettings.Add("Parity", parityS);
}
break;
}
}
}
此代码,因为它在设备管理器的设置返回一个COM端口的状态。
无法信任USB仿真器驱动程序来获得此权限。这只是没关系,你不再使用MS-Dos。请注意,4个数据位不可能是正确的,没有我知道的UART支持。 7或8是理智的价值观。 –
这不仅仅是模拟器总是返回默认值,它也是类System.IO.Ports.SerialPort。而关于配置值我只是改变了他们现在测试我的代码。 –
这是预期的,他们看着完全相同的配置。只是当它是flakey时不要依赖它。根据模拟器的品牌和型号,您无法依赖此属性表。 –