elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Como detectar USB , Memorias SD y mostrar un aviso?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como detectar USB , Memorias SD y mostrar un aviso?  (Leído 3,596 veces)
**Aincrad**


Desconectado Desconectado

Mensajes: 682



Ver Perfil WWW
Como detectar USB , Memorias SD y mostrar un aviso?
« en: 29 Junio 2018, 04:33 am »

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.


En línea



**Aincrad**


Desconectado Desconectado

Mensajes: 682



Ver Perfil WWW
Re: Como detectar USB , Memorias SD y mostrar un aviso?
« Respuesta #1 en: 3 Julio 2018, 21:59 pm »

Hola , bueno estos dias he estado estudiando y bueno esto he lo que he logrado hacer por mi cuenta :

Código
  1. Imports System.IO
  2.  
  3. Public Class Form1
  4.  
  5.    Dim Errores As New List(Of String)
  6.  
  7.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  8.        detectar()
  9.    End Sub
  10.  
  11.    Private Sub detectar()
  12.        For Each USBex In Environment.GetLogicalDrives
  13.            If New DriveInfo(USBex).IsReady = True Then
  14.                If Not New DriveInfo(USBex).DriveType = DriveType.Fixed Then
  15.                    Try
  16.                        ListBox1.Items.Add(USBex)
  17.                    Catch ex As Exception
  18.                        Errores.Add(ex.Message)
  19.                        'ListBox2.Items.Add(errores)
  20.                    End Try
  21.                End If
  22.            End If
  23.        Next
  24.    End Sub
  25.  
  26. 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.


En línea



Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: Como detectar USB , Memorias SD y mostrar un aviso?
« Respuesta #2 en: 4 Julio 2018, 09:46 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.

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
« Última modificación: 4 Julio 2018, 13:45 pm por Eleкtro » En línea



**Aincrad**


Desconectado Desconectado

Mensajes: 682



Ver Perfil WWW
Re: Como detectar USB , Memorias SD y mostrar un aviso?
« Respuesta #3 en: 4 Julio 2018, 18:06 pm »

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 .
En línea



Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: Como detectar USB , Memorias SD y mostrar un aviso?
« Respuesta #4 en: 4 Julio 2018, 20:05 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


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]'



saludos
« Última modificación: 5 Julio 2018, 11:42 am por Eleкtro » En línea



**Aincrad**


Desconectado Desconectado

Mensajes: 682



Ver Perfil WWW
Re: Como detectar USB , Memorias SD y mostrar un aviso?
« Respuesta #5 en: 5 Julio 2018, 21:48 pm »


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.
En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como Eliminar aviso
Multimedia
ceta65 1 1,646 Último mensaje 31 Enero 2006, 21:33 pm
por Sourraund
Aprende a Cómo detectar virus en memorias USB
Seguridad
‭‭‭‭jackl007 4 9,010 Último mensaje 20 Octubre 2010, 05:22 am
por Marshal
[Python]Detectar memorias USB windows
Scripting
AdeLax 3 6,822 Último mensaje 2 Diciembre 2013, 16:41 pm
por Eleкtro
Mostrar aviso de usuario ya registrado
Desarrollo Web
Phantasy 1 1,797 Último mensaje 30 Noviembre 2013, 16:16 pm
por Phantasy
Snapchat, acusada de mostrar 'contenido sexual' a niños sin previo aviso
Noticias
wolfbcn 0 1,859 Último mensaje 8 Julio 2016, 15:48 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines