2010-03-30 61 views
10

¿C# proporciona un medio efectivo para escanear los puertos COM disponibles? Me gustaría tener una lista desplegable en mi aplicación en la que el usuario pueda seleccionar uno de los puertos COM detectados. Crear y poblar la lista desplegable no es un problema. Solo necesito saber cómo escanear los puertos COM disponibles usando C#. Estoy usando Microsoft Visual C# 2008 Express Edition. Gracias.¿Cómo escanear puertos COM en C#?

Respuesta

13

System.IO.Ports es el espacio de nombres que desea.

SerialPort.GetPortNames mostrará una lista de todos los puertos COM en serie.

Desafortunadamente, los puertos paralelos no se admiten directamente desde C#, ya que se utilizan con poca frecuencia, excepto en situaciones heredadas. Dicho esto, puede enumerarlos consultando la siguiente clave del registro:

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\PARALLEL PORTS 

Ver el espacio de nombres para más detalles.

+1

Gracias por los detalles adicionales, pero estoy realmente interesado en enumerar los puertos COM serie (no en paralelo heredado). –

+1

@Jim Fell: pensé que era la primera vez que lo publicaba, pero pensándolo bien decidí ser explícito sobre el paralelo, por las dudas. – Randolpho

+1

@Randolpho y lo aprecio, ya que esto acaba de aparecer en los resultados de búsqueda de Google para LPT. :) –

2

Use WMI a través del espacio de nombres System.Management. Un Google rápido encuentra este código:

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 mejor solución! –

+2

SerialPort.GetPortNames utiliza datos de registro que no se mantienen actualizados. Si el usuario está enchufado y desconectando mucho las cosas, he encontrado que el enfoque de clase de gestión es más confiable. – SteveCav

+0

Solo era necesario para enumerar puertos y fui por WMI. Sin embargo, no parece incluir adaptadores de USB a serie, o al menos no están en la lista. Con 'SerialPort.GetPortNames', lo eran, y la lista se actualizó de inmediato. – OregonGhost

Cuestiones relacionadas