Hola:
Con este código modificado para evitar multiples llamadas en mi equipo con Windows XP me los detecta igual que el sistema.
Código vb:
Ver originalOption Explicit
'Función Api getLogicalDrives para recuperar las unidades
Private Declare Function GetLogicalDrives Lib "kernel32" () As Long
' Función Api GetDriveType para obtener el tipo y clase de unidad
Private Declare Function GetDriveType _
Lib "kernel32" _
Alias "GetDriveTypeA" ( _
ByVal nDrive As String) As Long
Private Function TipoUnidad(Unidad As String) As String
' Llamamos a la función pasandole la unidad que queremos obtener la información
Select Case GetDriveType(Trim(Unidad & ":\"))
Case 2
' Unidad de tipo removible, por ejemplo la unidad A:
TipoUnidad = Unidad & ":\ Unidad removible"
Case 3
' Por ejemplo un disco duro
TipoUnidad = Unidad & ":\ Unidad Fija"
Case Is = 4
' Una unidad de red
TipoUnidad = Unidad & ":\ Unidad remota"
Case Is = 5
'Unidad de Cd - Dvd
TipoUnidad = Unidad & ":\ Unidad de Cd-Rom"
Case Is = 6
' Para una unidad de dsico Virtual
TipoUnidad = Unidad & ":\ Unidad virtual"
Case Else
'Cuando es desconocida
TipoUnidad = Unidad & ":\ Unidad no reconocida"
End Select
End Function
Private Sub Command1_Click()
Dim LDs As Long, Cnt As Long, sDrives As String
LDs = GetLogicalDrives
sDrives = "Drives disponibles: "
For Cnt = 0 To 25
If (LDs And 2 ^ Cnt) <> 0 Then
'sDrives = sDrives + " " + Chr$(65 + Cnt)
MsgBox TipoUnidad(Chr$(65 + Cnt))
End If
Next Cnt
'Mostramos las unidades
'MsgBox sDrives, vbInformation, "Drives del sistema"
End Sub