Me inmagino que debería definir las letras desde la A hasta la Z en un string saltándome las letras del dico local C y la D. que nunca son de algún dispositivo extraible.
Con esto ya puedo detectar los discos extraible pero ahora necesito su ayuda para crear un bucle y así poder detectar los nuevos usb que se conectan
No, esa no es la manera de hacerlo.
La forma correcta de hacerlo sería o bien procesando el mensaje de ventana
WM_DEVICECHANGE en la función
WndProc (WindowProcedure) haciendo uso de la estructura nativa
DevBroadcastVolume, o bien suscribiéndote a los eventos de las clases de WMI, concretamente a la clase
Win32_DeviceChangeEvent si mal no recuerdo:
https://docs.microsoft.com/en-us/windows/desktop/CIMWin32Prov/win32-devicechangeevent - sí, acabo de testearlo, aunque como alternativa al parecer también podrías usar la clase
Win32_PnPEntity:
https://stackoverflow.com/a/5329524/1248295¿Ventajas y desventajas?, velocidad de ejecución (WM_DEVICECHANGE) versus flexibilidad de código (WMI); por decirlo de una manera entendible, la infraestructura de WMI propaga los datos de las consultas en intervalos algo largos, en comparación.
No viene mal de vez en cuando revisar/buscar en los códigos de la librería de snippets para VB.NET, aquí compartí un monitor de inserción y extracción de dispositivos basado en lo que te estuve comentando de la estructura
DevBroadcastVolume:
Y aquí abajo compartí un código que puedas adaptar para suscribirte a los eventos necesarios de las clases de WMI para conseguir el mismo resultado ( observa los ejemplos de utilización que escribí abajo del todo del comentario, en la query de WMI del primer ejemplo solo tendrías que cambiar el nombre de la clase "
Win32_VolumeChangeEvent" por "
Win32_DeviceChangeEvent" para tenerlo todo listo ):
Saludos