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