Wie bekommt man in C# eine Liste der Com Ports

Gast #953589
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.
Gast #953620
Lesenswert?

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
    }
#953658
Lesenswert?

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 #958252
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren