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;
}
}
}
Ce code renvoie l'état d'un com port tel qu'il est défini dans un gestionnaire de périphériques.
On ne peut pas faire confiance aux pilotes d'émulateur USB pour obtenir ce droit. Cela n'a pas d'importance, vous n'utilisez plus MS-Dos. Notez que 4 bases de données ne peuvent pas être correctes, aucun UART que je connais ne le supporte. 7 ou 8 sont des valeurs raisonnables. –
Ce n'est pas seulement l'émulateur qui retourne toujours les valeurs par défaut, c'est aussi la classe System.IO.Ports.SerialPort. Et à propos des valeurs de configuration, je les ai seulement modifiées pour tester mon code pour le moment. –
Cela est attendu, ils regardent exactement la même configuration. Ne comptez pas sur lui quand il est flakey. Vous ne pouvez pas non plus compter sur cette feuille de propriétés, selon la marque et le modèle de l'émulateur. –