2017-02-13 1 views
0

J'ai changé la configuration de mon Port Com dans le gestionnaire de périphériques mais ma classe serialPort et la Classe WMI API Win32_SerialPortConfiguration renvoient toujours la configuration par défaut de ce port com. enter image description herePourquoi l'API WMI et la classe SerialPort retournent-elles les configurations par défaut d'un port com?

+0

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. –

+0

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. –

+0

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. –

Répondre

0
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.