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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Detectar Unidades USB (Pendrive) (SRC)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Detectar Unidades USB (Pendrive) (SRC)  (Leído 4,548 veces)
Hasseds

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Detectar Unidades USB (Pendrive) (SRC)
« en: 20 Abril 2009, 23:11 pm »

Hay varios codes que hacen lo mismo, pero todos los que encontré usan Hook (me resisto a usarlos)
Solo un Timer1 en el Form

NOTA 1: en el momento que el If del timer1 devuelve el string con la letra de la unidad  detectada ya se puede "operar"

NOTA 2: este code no incluye a los disquetes, ya que el for de la Function UnidadesUSB empiza desde 2 hasta 25 (cero y uno corresponden tambien a unidades extribles pero el sistema los reserva para las disqueteras)

Código:
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Option Explicit ' Hassed (http://foro.elhacker.net/programacion_vb-b50.0/)
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Dim ControlUnidadesUSB1 As String: Dim ControlUnidadesUSB2 As String

Private Sub Form_Load()
  Timer1.Interval = 50: Me.AutoRedraw = True: Me.FontBold = True
End Sub

Private Function UnidadesUSB() As String
  Dim DiscosLogicos As Long: DiscosLogicos = GetLogicalDrives: Dim i As Long
  For i = 2 To 25
    If (DiscosLogicos And 2 ^ i) <> 0 Then
      If GetDriveType(Chr$(65 + i) + ":") = 2 Then
        UnidadesUSB = UnidadesUSB + Chr$(65 + i)
      End If
    End If
  Next i
End Function

Private Sub Timer1_Timer()
  ControlUnidadesUSB1 = UnidadesUSB
  If ControlUnidadesUSB1 <> ControlUnidadesUSB2 Then
    If Len(ControlUnidadesUSB1) > Len(ControlUnidadesUSB2) Then
      Dim i As Integer
      For i = 1 To Len(ControlUnidadesUSB1)
        If InStr(ControlUnidadesUSB2, Mid(ControlUnidadesUSB1, i, 1)) = 0 Then Me.Print Mid(ControlUnidadesUSB1, i, 1) + vbTab & Time
      Next i
    End If
    ControlUnidadesUSB2 = UnidadesUSB
  End If
End Sub



NOTA 3: el mismo code pero un poco mas completo



Código:
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Option Explicit ' Hassed (http://foro.elhacker.net/programacion_vb-b50.0/)
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Dim ControlUnidadesUSB1 As String: Dim ControlUnidadesUSB2 As String

Private Sub Form_Load()
  If App.PrevInstance = True Then End
  ControlUnidadesUSB2 = "$"
  Me.AutoRedraw = True
  Me.FontBold = True
  Timer1.Interval = 50
End Sub
Private Function UnidadesUSB() As String
  Dim LDs As Long:  LDs = GetLogicalDrives
  Dim Cnt As Long: Dim sDrives As String
  For Cnt = 2 To 25
    If (LDs And 2 ^ Cnt) <> 0 Then
      If GetDriveType(Chr$(65 + Cnt) + ":") = 2 Then
        sDrives = sDrives + Chr$(65 + Cnt)
      End If
    End If
  Next Cnt
  UnidadesUSB = Replace(Replace(sDrives, " ", ""), ":", "")
End Function

Private Sub Timer1_Timer()
  If UnidadesUSB <> "" Then Me.Caption = "Unidades USB: " + UnidadesUSB
  If UnidadesUSB = "" Then Me.Caption = "No hay Unidades USB conectadas"
  ControlUnidadesUSB1 = UnidadesUSB
  If ControlUnidadesUSB1 <> ControlUnidadesUSB2 Then
      Dim i As Integer
      If Len(ControlUnidadesUSB1) > 0 Then
          If Len(ControlUnidadesUSB1) > Len(ControlUnidadesUSB2) Then
              For i = 1 To Len(ControlUnidadesUSB1)
                  If InStr(ControlUnidadesUSB2, Mid(ControlUnidadesUSB1, i, 1)) = 0 Then Me.Print "CONECCIÓN" + vbTab + Mid(ControlUnidadesUSB1, i, 1) + vbTab & Time
              Next i
              ControlUnidadesUSB2 = UnidadesUSB
          Else
              If ControlUnidadesUSB2 = "$" Then
                  Me.Print "CONECCIÓN" + vbTab + UnidadesUSB + vbTab & Time
                  ControlUnidadesUSB2 = UnidadesUSB
              Else
                  For i = 1 To Len(ControlUnidadesUSB2)
                      If InStr(ControlUnidadesUSB1, Mid(ControlUnidadesUSB2, i, 1)) = 0 Then Me.Print "EXPULCIÓN" + vbTab + Mid(ControlUnidadesUSB2, i, 1) + vbTab & Time
                  Next i
                  ControlUnidadesUSB2 = UnidadesUSB
              End If
          End If
      Else
          If Len(ControlUnidadesUSB1) < Len(ControlUnidadesUSB2) And ControlUnidadesUSB2 <> "$" Then
              Me.Print "EXPULCIÓN" + vbTab + ControlUnidadesUSB2 + vbTab & Time
              ControlUnidadesUSB2 = "$"
          Else
              Me.Print "SIN  DATOS" + vbTab + "···" + vbTab & Time
              ControlUnidadesUSB2 = UnidadesUSB
          End If
      End If
  End If
End Sub



NOTA 4: Saludos



« Última modificación: 26 Mayo 2009, 12:00 pm por Hassed » En línea

Sergio Desanti
Angeldj27

Desconectado Desconectado

Mensajes: 199


Ahorra Agua... Beba Cerveza


Ver Perfil
Re: Detectar Unidades USB (Sin Hook)
« Respuesta #1 en: 20 Abril 2009, 23:59 pm »

Bueno pero se supone que kieres ahorrar recursos y en eso los Hook hacen un buen trabajo.

Saludos


En línea



"Que vamos a hacer Mañana?..... Lo mismo que hacemos todos los dias Pinky tratar de Conquistar el Mundoooo!!!!!
Hasseds

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Detectar Unidades USB (Sin Hook)
« Respuesta #2 en: 21 Abril 2009, 17:15 pm »

Cita de: Hassed  link=topic=252527.msg1220588#msg1220588 date=1240261909
Hay varios codes que hacen lo mismo, pero todos los que encontré usan Hook (me resisto a usarlos)

Bueno pero se supone que kieres ahorrar recursos y en eso los Hook hacen un buen trabajo.

Saludos

Tal vez me expresé mal Angeldj27, me resisto a meter un  Hook para algo tan simple como obtener un string con la letra de una unidad.

Saludos


« Última modificación: 26 Mayo 2009, 12:01 pm por Hassed » En línea

Sergio Desanti
XcryptOR

Desconectado Desconectado

Mensajes: 228



Ver Perfil
Re: Detectar Unidades USB (Sin Hook) (Source)
« Respuesta #3 en: 21 Abril 2009, 19:52 pm »

ademas de minimizar consumo de recursos, es la mejor forma de hacerlo, el sistema windows es un sistema basado en mensajes y un timer la verdad si no lo manejas adecuadamente se como al procesador
En línea



Hasseds

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Detectar Unidades USB (Sin Hook) (Source)
« Respuesta #4 en: 21 Abril 2009, 20:40 pm »

ademas de minimizar consumo de recursos, es la mejor forma de hacerlo, el sistema windows es un sistema basado en mensajes y un timer la verdad si no lo manejas adecuadamente se como al procesador

No en este caso, XcryptOR , el código del Timer solo se ejecuta cuando se conecta un pen y el consumo del cpu está clavado en cero, chequealo  comparando la dos maneras.

Saludos.
« Última modificación: 26 Mayo 2009, 12:01 pm por Hassed » En línea

Sergio Desanti
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Detectar correctamente unidad de un pendrive « 1 2 3 »
Scripting
lucaslopezld123 22 11,229 Último mensaje 17 Junio 2013, 01:41 am
por Donmanux
¿Como monitorizar unidades de dispositivos PENDRIVE?
.NET (C#, VB.NET, ASP)
Eleкtro 8 4,697 Último mensaje 9 Febrero 2013, 20:26 pm
por HdM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines