GetDriveType y EsCD

Saber de que tipo es una unidad de disco y
si es una unidad CD-ROM (16 y 32 bits)

Actualizado: 16-Jun-97
Corregido el link del fichero zip: 23/Mar/2002



Con esta función del API se puede averiguar el tipo de unidad, en la versión de 32 bits, la cosa está bastante clara y según el valor devuelto podemos saber bastante de la unidad que estamos tratando.
Pero en 16 bits sólo podemos obtener información de que es un disco removible (disquete), fijo (discos duros) o unidad de red (puede ser eso una unidad de red o bien un CD-ROM)

El motivo de esta página es aportar una librería DLL compilada en Delphi y aportada por Robert Biglio, con la que podemos saber desde 16 bits si la unidad que estamos comprobando es un CDROM o no.
Además se muestra el ejemplo para usar GetDriveType tanto en 16 como en 32 bits; parte del código usado, me lo envió Joe LeVasseur, aunque ya estaba publicado en las páginas, pero para que sirva de agradecimiento por ayudar a encontrar una solución (también envió otra DLL para hacer la misma función que la de Robert).

Gracias a Robert y Joe y también a Nora Maridueña que es la causante de esta "búsqueda y captura" por una DLL para saber cual es la unidad de CD-ROM.

Espero que os pueda ser de alguna utilidad.

Pulsa en este link para bajar los listados, (getCDROM.zip 3 KB)


Ejemplo para comprobar si una unidad es un CD-ROM

'-------------------------------------------------------------
'Form de ejemplo para mostrar los tipos de unidades instaladas
'y accesibles (en caso de unidades de red)
'-------------------------------------------------------------
Option Explicit

#If Win32 Then
    'Para 32 bits
    Private Declare Function GetDriveType Lib "kernel32" Alias _
        "GetDriveTypeA" (ByVal nDrive As String) As Long
#Else
    'Para 16 bits
    'Función del API, pero no detecta si es un CD
    Private Declare Function GetDriveType Lib "Kernel" _
        (ByVal nDrive As Integer) As Integer
    'Función de Robert Biglio
    Private Declare Function EsCD Lib "CD16.DLL" _
        (ByVal nDrive As Byte) As Integer
#End If
Function BuscarCDROM() As String
    Dim NumDisco As Byte
    Dim StrDisco$

    Const DRIVE_CDROM = 5

    For NumDisco = 0 To 25
        StrDisco = Chr(NumDisco + 65) & ":\"
        'Devuelve la última unidad de CDROM
        #If Win32 Then

        If GetDriveType(StrDisco) = DRIVE_CDROM Then
        #Else

        If EsCD(NumDisco) Then
        #End If
            BuscarCDROM = StrDisco
            'Quitar el comentario si se quiere mostrar
            'la primera unidad de CDROM
            'Exit For
        End If
    Next
End Function
Private Sub LlenarLista()
    Dim NumDisco%, StrDisco$
    Dim ret&
    Dim sTipos(0 To 6) As String
    ' Para los valores de retorno de GetDriveType (32bits)
    sTipos(0) = " No Instalado"
    sTipos(1) = " No Instalado"
    sTipos(2) = " Extraible"
    sTipos(3) = " Fijo"
    sTipos(4) = " Remoto"
    sTipos(5) = " CDROM"
    sTipos(6) = " RAMDISK"

    For NumDisco = 0 To 25
        StrDisco = Chr(NumDisco + 65) & ":\"
        #If Win32 Then
        ret = GetDriveType(StrDisco)

        #Else
        ret = GetDriveType(NumDisco)

        #End If
        If ret > 1 Then
            List1.AddItem Format(NumDisco, "00") & " " & StrDisco & " --> " & ret & sTipos(ret)
        End If
    Next
End Sub
Private Sub Command1_Click()
    Text1.Text = BuscarCDROM()
End Sub
Private Sub Form_Load()
    #If Win32 Then
        Caption = "Versión para 32 bits"
    #Else
        Caption = "Versión para 16 bits"
    #End If
    LlenarLista
End Sub

El Form de Ejemplo para 16 y 32 bits en funcionamiento


Esta es la versión de 16 bits (fijate en la unidad H)

 


En la versión de 32bits se sabe que H es un CDROM

 


ir al índice