Wie bekommt man in C# eine Liste der Com Ports

Gast
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.
Gast
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();
Gast
und wie werden die Ports in der Combobox dann aufgelistet?
1
private void PortSelect_SelectionChangeCommitted(object sender, System.EventArgs e)
2
    {
3
            string[] ports = SerialPort.GetPortNames();
4
            
5
            
6

7
      if (PortSelect.SelectedIndex == 0) return;
8
            if (CommSetup(PortSelect.SelectedIndex, 19200))
9
      {
10
                RegistryKey Key = Registry.CurrentUser.OpenSubKey("xxx", true);
11
                if (Key == null) Key = Registry.CurrentUser.CreateSubKey("xxx");
12
        Key.SetValue("CommPort",PortSelect.SelectedIndex);
13
      }
14
      else
15
      {
16
        PortSelect.SelectedIndex = 0;
17
        MessageBox.Show("COM Port kann nicht geöffnet werden!", "xxx",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
18

19
      }
20
    }
Michael wrote:
> und wie werden die Ports in der Combobox dann aufgelistet?
1
aComboBox.Items.AddRange(SerialPort.GetPortNames());

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

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

8
        }

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.