2011-03-26 15 views
10

Tengo un código muy pequeño que muestra los puertos COM disponibles.Lista de puertos COM disponibles

Mi pregunta es:

¿Hay una manera fácil de hacer que el programa se ejecute en la bandeja y sólo emergente cuando un nuevo puerto COM está disponible y es posible añadir el nombre para el puerto COM que puede ver en el administrador de dispositivos ec "puerto serial USB"?

A menudo agrego/elimino un commutador USB-> RS232 y me parece un fastidio porque debo acceder al administrador de dispositivos para ver qué puerto COM está asignado. No es el mismo cada vez

Tal vez ya hay una pequeña aplicación que puede hacer esto, pero yo no he encontró en Google aún

using System; 
using System.Windows.Forms; 
using System.IO.Ports; 

namespace Available_COMports 

{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
    { 
     InitializeComponent(); 

     //show list of valid com ports 
     foreach (string s in SerialPort.GetPortNames()) 
     { 
      listBox1.Items.Add(s); 
     } 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
    } 

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
    } 
} 

}

Respuesta

5

Tome un vistazo a this question. Utiliza WMI para encontrar puertos COM disponibles. Puede realizar un seguimiento de qué puertos COM existen y solo notificar acerca de los nuevos.

0

El código para obtener el número COM de determinado dispositivo.

List<USBDeviceInfo> devices = new List<USBDeviceInfo>(); 
ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher("root\\CIMV2", 
    "SELECT * FROM Win32_PnPEntity"); 
foreach (ManagementObject queryObj in searcher.Get()) 
{ 
    devices.Add(new USBDeviceInfo(
     (string)queryObj["DeviceID"], 
     (string)queryObj["PNPDeviceID"], 
     (string)queryObj["Name"] 
    )); 
} 

foreach (USBDeviceInfo usbDevice in devices) 
{ 
    if (usbDevice.Description != null) 
    { 
     if (usbDevice.Description.Contains("NAME OF Device You are Looking for")) //use your own device's name 
     { 
      int i = usbDevice.Description.IndexOf("COM"); 
      char[] arr = usbDevice.Description.ToCharArray(); 
      str = "COM" + arr[i + 3]; 
      if (arr[i + 4] != ')') 
      { 
       str += arr[i + 4]; 
      } 
      break; 
     } 
    } 
} 

mySerialPort = new SerialPort(str); 
Cuestiones relacionadas