Buenas, Estoy intentando hacer una app que cuando alguien introduzca un Pendrive o Adaptador SD el programa lo detecte y te muestre un form 2 con un label que contenga la ruta del mismo. pero no logro hacerlo.
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.
en pocas palabras tengo 2 formularios, el primero detectara si algún dispositivo de almacenamiento extraible es conectado y cuando detecte alguno mostrara el formulario 2 que contendrá la ruta en un label. eso es lo que no logro hacer . :-\ si alguien tiene algún code que me facilite.
Gracias de antemano.
Hola , bueno estos dias he estado estudiando y bueno esto he lo que he logrado hacer por mi cuenta :
Imports System.IO
Public Class Form1
Dim Errores As New List(Of String)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
detectar()
End Sub
Private Sub detectar()
For Each USBex In Environment.GetLogicalDrives
If New DriveInfo(USBex).IsReady = True Then
If Not New DriveInfo(USBex).DriveType = DriveType.Fixed Then
Try
ListBox1.Items.Add(USBex)
Catch ex As Exception
Errores.Add(ex.Message)
'ListBox2.Items.Add(errores)
End Try
End If
End If
Next
End Sub
End Class
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 , pero bueno el bucle no es problema como tal , ya que probé con un bucle for / next .
el problema es que el lista en el listbox1 los viejos usb conectado, y a demás siento que hacer un bucle for/ next ahi esta mal .
simplemente lo que quiero es que detectete los nuevos usb conectados al PC sin listar los viejos. y muestre un un nuevo form los usb conectados.
Cita de: **Aincrad** en 29 Junio 2018, 04:33 AM
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.
Cita de: **Aincrad** en 3 Julio 2018, 21:59 PM
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:
- https://foro.elhacker.net/net/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg2046787#msg2046787
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 ):
- https://foro.elhacker.net/net/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg2116330#msg2116330
Saludos
Gracias por responder; Revisare los links y me documentare de ello, gracias.
PD : No sabia que habías hecho un snippets tan útil :D . lo veré y después revisare todo el post del snippets desde la gaina 1 a la 54 :xD , para no volver preguntar cosas que ya prácticamente estan resultas :V ;D .
Cita de: **Aincrad** en 4 Julio 2018, 18:06 PM
lo veré y después revisare todo el post del snippets desde la gaina 1 a la 54 :xD , para no volver preguntar cosas que ya prácticamente estan resultas :V ;D .
Ok, pillo el sarcasmo xD, para mi también sería inaceptable buscar entre 54 páginas, pero ya no hay excusa para eso con el nuevo índice que he creado!:
https://foro.elhacker.net/net/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg1810584#msg1810584
- https://foro.elhacker.net/net/indice_de_la_libreria_de_snippets_para_vbnet-t485444.0.html;msg2167235#msg2167235
EDITO: por cierto, se me olvidó que también existía esta otra forma de hacerlo en WindowsForms:
'usar la Class DeviceWatcher en un WinForms, sirve para detectar los eventos de inserción/extracción de los dispositivos[/i]'
- https://foro.elhacker.net/net/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg1959392#msg1959392
saludos
Cita de: Eleкtro en 4 Julio 2018, 20:05 PM
- https://foro.elhacker.net/net/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg1959392#msg1959392
No pude haber deseado nada mejor :D , es perfecto. ;D Funciona bien y es rápido, Muchísimas Gracias. /
Cuando salga de vacaciones me pondré a estudiar mas VB.NET. ;-)
Gracias por todos tus Grandes aportes.