Para obtener los dispositivos USB que tiene nuestra computadora en c# vamos a hacer uso de la librería System.Management, esta librería debemos agregarla en las referencias de nuestro proyecto y al inicio de nuestra clase (using System.Management).
La siguientes dos clases hacen el trabajo y esta comentado que hace cada parte:
Clase para guardar la información de los dispositivos
/// <summary>
/// clase para guardar las especificaciones de los dispositivos
/// </summary>
public class USBInfo
{
//constructor
public USBInfo(string deviceID, string pnpDeviceID, string description)
{
this.DeviceID = deviceID;
this.PnpDeviceID = pnpDeviceID;
this.Description = description;
}
/// <summary>
/// Device ID
/// </summary>
public string DeviceID { get; private set; }
/// <summary>
/// Pnp Device Id
/// </summary>
public string PnpDeviceID { get; private set; }
/// <summary>
/// Descripción del dispositivo o nombre
/// </summary>
public string Description { get; private set; }
}
Clase que se encarga de obtener los dispositivos
public class Usb
{
/// <summary>
/// obtiene las usb de la computadora
/// </summary>
/// <returns></returns>
public List<USBInfo> GetUSBDevices()
{
//creamos una lista de USBInfo
List<USBInfo> lstDispositivos = new List<USBInfo>();
//creamos un ManagementObjectCollection para obtener nuestros dispositivos
ManagementObjectCollection collection;
//utilizando la WMI clase Win32_USBHub obtenemos todos los dispositivos USB
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub"))
//asignamos los dispositivos a nuestra coleccion
collection = searcher.Get();
//recorremos la colección
foreach (var device in collection)
{
//asignamos el dispositivo a nuestra lista
lstDispositivos.Add(new USBInfo(
(string)device.GetPropertyValue("DeviceID"),
(string)device.GetPropertyValue("PNPDeviceID"),
(string)device.GetPropertyValue("Description")
));
}
//liberamos el objeto collection
collection.Dispose();
//regresamos la lista
return lstDispositivos;
}
}
Y de esta manera hacemos uso de nuestra clase USB:
Usb oUsb = new Usb();
List<USBInfo> lstUSBD = oUsb.GetUSBDevices();