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