• Sábado 20 de Abril de 2024, 16:03

Autor Tema:  Help Pen Drives  (Leído 818 veces)

fabricioAngel

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Help Pen Drives
« en: Miércoles 11 de Marzo de 2009, 20:04 »
0
hola a todos soy nuevo en programacion y tengo el siguiente problema
no puedo hacer un programa que muestre en un list box la letra de la unidad, el ESN(número de serie del fabricante) y el numero de volumen (que pone windows) de cada pen drive que inserto
El problema es que si inserto dos pen drive juntos no coinciden las letras con los ESN
Tanto los esn como las letras y el volumen lo guardo en una matris el problema es que el sistema genera las letras y la guarda en una posicion de la matris pero puede ser que al primer dispositivo que detecta "Win32_DiskDrive" no Windows no le alla asignado la primer letra que genero
Espero que me entiendan si no pregúnteme
Ya no se mas que hacer
les paso el codigo
en el formulario
Código: Visual Basic
  1.  
  2. Option Explicit
  3. Dim detectado As Boolean
  4. Dim matriz_Volume(1 To 26, 1 To 3) As String
  5. Dim matriz_ESN(1 To 26) As String
  6. Dim numero_Volume As Long
  7. Dim nombre_Volume As String
  8. Private Sub cmdExtraer_Click()
  9. If lblUnidad.Caption <> "" Then
  10.     EjectDevice (lblUnidad.Caption)
  11.     lblUnidad.Caption = ""
  12.     lblESN.Caption = ""
  13.     lblNombVol.Caption = ""
  14.     lblNumVol.Caption = ""
  15.    
  16. Else
  17.     MsgBox "No hay dispositivos USB instalados"
  18.    
  19. End If
  20.  
  21. End Sub
  22.  
  23. Private Sub cmdDetectar_Click()
  24.    
  25.     Call Dame_Letra_USB
  26.    
  27.     If detectado = True Then
  28.         Call Numero_de_Serie
  29.         Call Mostrar
  30.        
  31.     Else
  32.          Matriz_volume_en_cero
  33.          Matriz_esn_en_cero
  34.     End If
  35.    
  36. End Sub
  37.  
  38. Public Sub Numero_de_Serie()
  39.     Dim Disco As Object
  40.     Dim cadena As String
  41.     Dim largo As Integer
  42.     Dim contador As Integer
  43.     Dim i As Integer
  44.     Dim posicion As Integer
  45.     Dim resultado As String
  46.     Dim largo_Res As Integer
  47.     Dim contador2 As Integer
  48.     Dim j As Integer
  49.     Dim posicion2 As Integer
  50.     Dim ESN As String
  51.     Dim k As Integer
  52.    
  53.     k = 1
  54.    
  55.     'Matriz_esn_en_cero
  56.        
  57.     With GetObject("WinMgmts:")
  58.         For Each Disco In .InstancesOf("Win32_DiskDrive") ' ej 3 objetos 2 usb + ide
  59.    
  60.             If Disco.InterfaceType = "USB" Then ' detecto si son usb
  61.                cadena = Disco.PNPDeviceID 'tiene embebido el ESN
  62.                largo = Len(cadena)
  63.                 contador = 0
  64.    
  65.                 For i = largo To 1 Step -1
  66.        
  67.                     posicion = InStr(i, cadena, "")
  68.                     contador = contador + 1
  69.            
  70.                     If posicion > 0 Then
  71.                         resultado = Right(cadena, contador - 1)
  72.                         Exit For
  73.                     End If
  74.                 Next
  75.    
  76.                 largo_Res = Len(resultado)
  77.                 contador2 = 0
  78.        
  79.                 For j = largo_Res To 1 Step -1
  80.                     posicion2 = InStr(j, resultado, "&")
  81.                     contador2 = contador2 + 1
  82.                    
  83.                     If posicion2 > 0 Then
  84.                         ESN = Left(resultado, largo_Res - contador2)
  85.                         matriz_ESN(k) = ESN
  86.                         k = k + 1
  87.                         Exit For
  88.                     End If
  89.                 Next
  90.        
  91.             End If ' cierra el primer if el q detecta usb
  92.        Next ' cierra el for q recorre los objetos
  93.    End With
  94.        
  95. End Sub
  96.  
  97. Public Sub Dame_Letra_USB()
  98.     Dim NumDisco As Integer
  99.     Dim StrDisco As String
  100.     Dim ret As Long
  101.     Dim letra_Unidad As String
  102.     Dim bandera As Boolean
  103.     Dim i As Integer
  104.            
  105.     bandera = False
  106.     i = 1
  107.    
  108.     For NumDisco = 0 To 25
  109.        
  110.         StrDisco = Chr(NumDisco + 65) & ":"   'convierte  a char c/numero del bucle esta es la letra a verificar
  111.        If NumDisco = 0 Then
  112.             ret = GetDriveType(StrDisco)
  113.         ElseIf NumDisco > 0 And GetDriveType(StrDisco) = 2 Then ' si pasa x este if se detecto un USB
  114.            ret = 7
  115.            
  116.             letra_Unidad = StrDisco
  117.             GetVolumeNumber (StrDisco)
  118.             matriz_Volume(i, 1) = letra_Unidad
  119.             matriz_Volume(i, 2) = nombre_Volume
  120.             matriz_Volume(i, 3) = Hex(numero_Volume)
  121.             i = i + 1
  122.             bandera = True
  123.             detectado = True
  124.            
  125.         ElseIf NumDisco > 0 And GetDriveType(StrDisco) <> 2 Then
  126.             ret = GetDriveType(StrDisco)
  127.         End If
  128.     Next
  129.    
  130.     If bandera = False Then
  131.        
  132.         MsgBox "No hay dispositivos USB instalados"
  133.         detectado = False
  134.     End If
  135.  
  136. End Sub
  137.  
  138. Sub GetVolumeNumber(strDrive As String)
  139. Dim SerialNum As Long
  140. Dim res As Long
  141. Dim Temp1 As String
  142. Dim Temp2 As String
  143.  
  144. Temp1 = String$(255, Chr$(0))
  145. Temp2 = String$(255, Chr$(0))
  146. res = GetVolumeInformation(strDrive, Temp1, _
  147. Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))
  148. nombre_Volume = Temp1
  149. numero_Volume = SerialNum
  150. End Sub
  151.  
  152. Public Sub Mostrar()
  153. Dim i As Integer
  154. For i = 1 To 26
  155.     If matriz_ESN(i) <> "" Then
  156.         If matriz_ESN(i) = "000000000000E6" Then
  157.             lst1.AddItem matriz_Volume(i, 1) & " " & matriz_ESN(i) & " " & matriz_Volume(i, 2) & " " & matriz_Volume(i, 3)
  158.             lblUnidad.Caption = matriz_Volume(i, 1)
  159.             lblESN.Caption = matriz_ESN(i)
  160.             lblNombVol.Caption = matriz_Volume(i, 2)
  161.             lblNumVol.Caption = matriz_Volume(i, 3)
  162.             fraMda.Visible = True
  163.         End If
  164.     End If
  165. Next
  166. End Sub
  167. Sub Matriz_volume_en_cero()
  168. Dim i As Integer
  169. For i = 1 To 26
  170.     matriz_Volume(i, 1) = ""
  171.     matriz_Volume(i, 2) = ""
  172.     matriz_Volume(i, 3) = ""
  173. Next
  174. End Sub
  175. Sub Matriz_esn_en_cero()
  176. Dim i As Integer
  177. For i = 1 To 26
  178.     matriz_ESN(i) = ""
  179.    
  180. Next
  181. End Sub
  182. Private Sub Form_Load()
  183.     lblUnidad.Caption = ""
  184.     lblESN.Caption = ""
  185.     lblNombVol.Caption = ""
  186.     lblNumVol.Caption = ""
  187.    
  188. End Sub
  189.  
  190.  

en el modulo
Código: Visual Basic
  1.  
  2. Option Explicit
  3. Declare Function GetVolumeInformation Lib "kernel32.dll" Alias _
  4. "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal _
  5. lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, _
  6. lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
  7. lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal _
  8. nFileSystemNameSize As Long) As Long
  9. Public Declare Function GetLogicalDrives Lib "kernel32" () As Long
  10. Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal
  11.  
  12.  
toda ayuda sera infinitamente agradecida  B)