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 IfFunction 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 FunctionPrivate 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 SubPrivate Sub Command1_Click() Text1.Text = BuscarCDROM() End SubPrivate Sub Form_Load() #If Win32 Then Caption = "Versión para 32 bits" #Else Caption = "Versión para 16 bits" #End If LlenarLista End SubEl 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