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


von Michael (Gast)


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

von tuppes (Gast)


Lesenswert?


von amalas (Gast)


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.

von Johnny (Gast)


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();

von Michael (Gast)


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
    }

von Arc N. (arc)


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

von technikus (Gast)


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
        }

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.