2010-03-30 30 views
10

Il C# fornisce un mezzo efficace per la scansione delle porte COM disponibili? Mi piacerebbe avere un elenco a discesa nella mia applicazione in cui l'utente può selezionare una delle porte COM rilevate. La creazione e la compilazione dell'elenco a discesa non è un problema. Ho solo bisogno di sapere come cercare le porte COM disponibili usando C#. Sto usando Microsoft Visual C# 2008 Express Edition. Grazie.Come cercare le porte COM in C#?

risposta

13

System.IO.Ports è lo spazio dei nomi che si desidera.

SerialPort.GetPortNames elencherà tutte le porte COM seriali.

Sfortunatamente, le porte parallele non sono supportate direttamente da C#, dato che sono usate molto raramente tranne che in situazioni legacy. Detto questo, è possibile elencarle interrogando la seguente chiave di registro:

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\PARALLEL PORTS 

Vedi lo spazio dei nomi per i dettagli.

+1

Grazie per i dettagli aggiuntivi, ma sono davvero interessato solo a elencare le porte COM seriali (non legacy parallele). –

+1

@Jim Fell: l'ho immaginato tanto la prima volta che l'ho postato, ma a pensarci bene ho deciso di essere esplicito sul parallelo, per ogni evenienza. – Randolpho

+1

@Randolpho e lo apprezzo perché è appena uscito da un risultato di ricerca di Google per LPT. :) –

2

Utilizzare WMI attraverso lo spazio dei nomi System.Management. Un rapido Google trova questo codice:

using System; 
using System.Management; 

public class Foo 
{ 
    public static void Main() 
    { 
     var instances = new ManagementClass("Win32_SerialPort").GetInstances(); 
     foreach (ManagementObject port in instances) 
     { 
      Console.WriteLine("{0}: {1}", port["deviceid"], port["name"]); 
     } 
} 
+0

SerialPort.GetPortNames soluzione migliore! –

+2

SerialPort.GetPortNames utilizza dati del registro non aggiornati. Se l'utente sta collegando e scollegando molto le cose, ho trovato che l'approccio managementclass è più affidabile. – SteveCav

+0

Necessario solo per enumerare le porte e per WMI. Tuttavia, non sembra includere adattatori da USB a seriale, o almeno non inclusi nell'elenco. Con 'SerialPort.GetPortNames', lo erano, e l'elenco è stato aggiornato immediatamente. – OregonGhost

Problemi correlati