Autor
|
Tema: Problemas con GetDriveType (Leído 1,668 veces)
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
Hola gente tengo un problema, necesito distinguir entre una Disketera y un Pen Drive o Data Traveler, pero la unica forma de hacerlo es con esta API que devuelve a las 2 como removible pero quisiera poder diferenciarlos: Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long Private Sub Form_Load() 'KPD-Team 1998 'URL: http://www.allapi.net/ 'E-Mail: KPDTeam@Allapi.net 'Set the graphic mode to persistent Me.AutoRedraw = True 'Get information about the C:\ Select Case GetDriveType("C:\") Case 2 Me.Print "Removable" Case 3 Me.Print "Drive Fixed" Case Is = 4 Me.Print "Remote" Case Is = 5 Me.Print "Cd-Rom" Case Is = 6 Me.Print "Ram disk" Case Else Me.Print "Unrecognized" End Select End Sub
Alguien sabe como diferenciar Disketera de Pen Drive ? Lo necesito por favor!
|
|
« Última modificación: 3 Agosto 2007, 05:42 am por Sancho.Mazorka »
|
En línea
|
|
|
|
LeandroA
|
hola puedes compara el tamaño por lo general un pendrive es mayor a 1457664 bytes y es "FAT" esto mas que nada para ver si esta el disco puesto (la disquetera) Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Private Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal lpRootPathName As String, lpFreeBytesAvailableToCaller As Long, lpTotalNumberOfBytes As Long, lpTotalNumberOfFreeBytes As Long) As Long
Private Sub RecuperarDiscoExtraible() Dim strSave As String Dim Drive As String Dim Removible As String Dim totalbytes As Long Dim FSName As String
strSave = String(255, Chr$(0))
ret& = GetLogicalDriveStrings(255, strSave)
For keer = 1 To 100 If Left$(strSave, InStr(1, strSave, Chr$(0))) = Chr$(0) Then Exit For Drive = Left$(strSave, InStr(1, strSave, Chr$(0)) - 1)
If GetDriveType(Drive) = 2 Then Removible = Drive FSName = String$(255, Chr$(0)) GetVolumeInformation Removible, 255, 255, 255, 0, 0, FSName, 255 FSName = Left$(FSName, InStr(1, FSName, Chr$(0)) - 1) Call GetDiskFreeSpaceEx(Removible, 255, totalbytes, 255) If totalbytes <> 1457664 And FSName = "FAT" Then Me.Print Drive End If
strSave = Right$(strSave, Len(strSave) - InStr(1, strSave, Chr$(0))) Next keer
End Sub
Private Sub Form_Load() Me.AutoRedraw = True Call RecuperarDiscoExtraible End Sub
Saludos yo no lo prove con un pendrive sino con un celular pero supongo que es lo mismo
|
|
|
En línea
|
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
Funciona perfectamente, pero te equivocaste en la asignacion mira: If totalbytes <> 1457664 And FSName = "FAT" Then Me.Print Drive
A mi me funciono cuando le coloque FAT32 If totalbytes <> 1457664 And FSName = "FAT32" Then Me.Print Drive
Muchas gracias y aprendi algo nuevo, todos los pen drive son FAT32
|
|
« Última modificación: 4 Agosto 2007, 05:11 am por Sancho.Mazorka »
|
En línea
|
|
|
|
Red Mx
Rojito
Colaborador
Desconectado
Mensajes: 3.649
Viva México Cabrones...
|
Muchas gracias y aprendi algo nuevo, todos los pen drive son FAT32 No de echo cuando los compras nuevos bienen en FAT ( bueno los que yo eh visto kingston y otras marcas) fat y fat32 las tienes como opciones en el windows cuando formateas el dispositivo de almacenamiento USB, aunque tengo entendido que tambien le puedes poner NTFS
|
|
|
En línea
|
Desarrollar Malware Es Causa De Cancer...
|
|
|
|
LeandroA
|
hola lo de FAT era por si la disquetera estaba basia entonces iva a ser <> 1457664 osea = 0 pero o podes poner FSName = "FAT" or FSName = "FAT32" or FSName = "NTFS"
o bien si es > 1457664
|
|
|
En línea
|
|
|
|
|
|