Programación General > Visual Basic 6.0 e inferiores
Help Pen Drives
(1/1)
fabricioAngel:
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 --- Option ExplicitDim detectado As BooleanDim matriz_Volume(1 To 26, 1 To 3) As StringDim matriz_ESN(1 To 26) As StringDim numero_Volume As LongDim nombre_Volume As StringPrivate Sub cmdExtraer_Click()If lblUnidad.Caption <> "" Then EjectDevice (lblUnidad.Caption) lblUnidad.Caption = "" lblESN.Caption = "" lblNombVol.Caption = "" lblNumVol.Caption = "" Else MsgBox "No hay dispositivos USB instalados" End If End Sub Private Sub cmdDetectar_Click() Call Dame_Letra_USB If detectado = True Then Call Numero_de_Serie Call Mostrar Else Matriz_volume_en_cero Matriz_esn_en_cero End If End Sub Public Sub Numero_de_Serie() Dim Disco As Object Dim cadena As String Dim largo As Integer Dim contador As Integer Dim i As Integer Dim posicion As Integer Dim resultado As String Dim largo_Res As Integer Dim contador2 As Integer Dim j As Integer Dim posicion2 As Integer Dim ESN As String Dim k As Integer k = 1 'Matriz_esn_en_cero With GetObject("WinMgmts:") For Each Disco In .InstancesOf("Win32_DiskDrive") ' ej 3 objetos 2 usb + ide If Disco.InterfaceType = "USB" Then ' detecto si son usb cadena = Disco.PNPDeviceID 'tiene embebido el ESN largo = Len(cadena) contador = 0 For i = largo To 1 Step -1 posicion = InStr(i, cadena, "") contador = contador + 1 If posicion > 0 Then resultado = Right(cadena, contador - 1) Exit For End If Next largo_Res = Len(resultado) contador2 = 0 For j = largo_Res To 1 Step -1 posicion2 = InStr(j, resultado, "&") contador2 = contador2 + 1 If posicion2 > 0 Then ESN = Left(resultado, largo_Res - contador2) matriz_ESN(k) = ESN k = k + 1 Exit For End If Next End If ' cierra el primer if el q detecta usb Next ' cierra el for q recorre los objetos End With End Sub Public Sub Dame_Letra_USB() Dim NumDisco As Integer Dim StrDisco As String Dim ret As Long Dim letra_Unidad As String Dim bandera As Boolean Dim i As Integer bandera = False i = 1 For NumDisco = 0 To 25 StrDisco = Chr(NumDisco + 65) & ":" 'convierte a char c/numero del bucle esta es la letra a verificar If NumDisco = 0 Then ret = GetDriveType(StrDisco) ElseIf NumDisco > 0 And GetDriveType(StrDisco) = 2 Then ' si pasa x este if se detecto un USB ret = 7 letra_Unidad = StrDisco GetVolumeNumber (StrDisco) matriz_Volume(i, 1) = letra_Unidad matriz_Volume(i, 2) = nombre_Volume matriz_Volume(i, 3) = Hex(numero_Volume) i = i + 1 bandera = True detectado = True ElseIf NumDisco > 0 And GetDriveType(StrDisco) <> 2 Then ret = GetDriveType(StrDisco) End If Next If bandera = False Then MsgBox "No hay dispositivos USB instalados" detectado = False End If End Sub Sub GetVolumeNumber(strDrive As String)Dim SerialNum As LongDim res As LongDim Temp1 As StringDim Temp2 As String Temp1 = String$(255, Chr$(0))Temp2 = String$(255, Chr$(0))res = GetVolumeInformation(strDrive, Temp1, _Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))nombre_Volume = Temp1numero_Volume = SerialNumEnd Sub Public Sub Mostrar()Dim i As IntegerFor i = 1 To 26 If matriz_ESN(i) <> "" Then If matriz_ESN(i) = "000000000000E6" Then lst1.AddItem matriz_Volume(i, 1) & " " & matriz_ESN(i) & " " & matriz_Volume(i, 2) & " " & matriz_Volume(i, 3) lblUnidad.Caption = matriz_Volume(i, 1) lblESN.Caption = matriz_ESN(i) lblNombVol.Caption = matriz_Volume(i, 2) lblNumVol.Caption = matriz_Volume(i, 3) fraMda.Visible = True End If End IfNextEnd SubSub Matriz_volume_en_cero()Dim i As IntegerFor i = 1 To 26 matriz_Volume(i, 1) = "" matriz_Volume(i, 2) = "" matriz_Volume(i, 3) = ""NextEnd SubSub Matriz_esn_en_cero()Dim i As IntegerFor i = 1 To 26 matriz_ESN(i) = "" NextEnd SubPrivate Sub Form_Load() lblUnidad.Caption = "" lblESN.Caption = "" lblNombVol.Caption = "" lblNumVol.Caption = "" End Sub
en el modulo
--- Código: Visual Basic --- Option ExplicitDeclare Function GetVolumeInformation Lib "kernel32.dll" Alias _"GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal _lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, _lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal _nFileSystemNameSize As Long) As LongPublic Declare Function GetLogicalDrives Lib "kernel32" () As LongPublic Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal toda ayuda sera infinitamente agradecida B)
Navegación
Ir a la versión completa