mikrocontroller.net

Forum: PC-Programmierung Wie bekommt man in C# eine Liste der Com Ports


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie bekommt man die Liste der verfügbaren Com Ports unter C# angezeigt?

Ich bin leider noch blutiger Anfänger und bin für jede Hilfe dankbar.

Viele Grüße
Michael

Autor: tuppes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: amalas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in der registry sind unter

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E978-E325 
-11CE-BFC1-08002BE10318}

alle comports gelistet.
dort kannst du ueber DriverDesc oder MatchingDeviceId das richtige 
device rausfinden.
wenn du die hardware-id kennst, kannst du den ersten schritt weglassen.
unter

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\

werden anhand der MatchinDeviceId die Devices ebenfalls nocheinmal 
gelistet.
wenn das device aktiv ist, kannst du auf

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\<MatchingDeviceId>\Cont 
rol\ActiveService

(wobei <MatchingDeviceId> natuerlich ersetzt werden sollte ;)) 
zugreifen, wenn es nicht aktiv ist, bekommst du einen FILE_NOT_FOUND 
zurueck.
in

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\<MatchingDeviceId>\Devi 
ce  Parameters\PortName

schliesslich stehen die vergebenen comports, wie zb 'COM5' oder so.

zumindest kann man auf diesem weg eine spezielle id zu einem device 
herausfinden. ob es einen einfacheren weg fuer eine liste aller 
vergebenen ids gibt, weiss ich nicht.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht genau wie unter dem Link, der "tuppes" vorher gepostet hat mit 
einer Zeile Code:

// Get a list of serial port names.
string[] ports = SerialPort.GetPortNames();

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wie werden die Ports in der Combobox dann aufgelistet?
private void PortSelect_SelectionChangeCommitted(object sender, System.EventArgs e)
    {
            string[] ports = SerialPort.GetPortNames();
            
            

      if (PortSelect.SelectedIndex == 0) return;
            if (CommSetup(PortSelect.SelectedIndex, 19200))
      {
                RegistryKey Key = Registry.CurrentUser.OpenSubKey("xxx", true);
                if (Key == null) Key = Registry.CurrentUser.CreateSubKey("xxx");
        Key.SetValue("CommPort",PortSelect.SelectedIndex);
      }
      else
      {
        PortSelect.SelectedIndex = 0;
        MessageBox.Show("COM Port kann nicht geöffnet werden!", "xxx",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

      }
    }

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael wrote:
> und wie werden die Ports in der Combobox dann aufgelistet?
aComboBox.Items.AddRange(SerialPort.GetPortNames());

p.s. statt mit der Registry zu arbeiten sollte man besser die dafür 
vorgesehenen ApplicationSettings ala
aNamespace.Properties.Settings.Default.CommPort = PortSelect.SelectedIndex;
benutzen...

Autor: technikus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hier mal meine Lösung:
private void Form1_Load(object sender, EventArgs e)
        {          
            cmbPort.Items.Clear();
            foreach (string s in System.IO.Ports.SerialPort.GetPortNames())
                cmbPort.Items.Add(s);
            cmbPort.SelectedIndex = 0;

        }

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.