Delphi: ¿Cómo obtener la letra de la unidad de CD-ROM?

Obteniendo la letra de la unidad de CD-ROM

Copyright © 2000 Ernesto De Spirito

Boletín Pascal. Newsletter gratuito para programadores Delphi (y Kylix) con artículos, noticias, trucos, componentes y enlaces a nuevo contenido Delphi en la red.

GetLogicalDriveStrings y GetDriveType

Para obtener la letra de la unidad correspondiente a la primera unidad de CD-ROM en un sistema haremos uso de dos funciones de la API de Windows: GetLogicalDriveStrings y GetDriveType. Con la primera recuperaremos la lista de de las unidades lógicas en un búfer. La lista es una secuencia de cadenas terminadas en nulo de cuatro caracteres de longitud (contando el terminador nulo), y termina en un caracter nulo, por ejemplo:

'a:\'#0'b:\'#0'c:\'#0'd:\'#0'f:\'#0#0

Con GetDriveType podemos determinar si una unidad determinada es una unidad de CD-ROM comprobando si el valor devuelto es igual a la constante DRIVE_CDROM.

La siguiente función devuelve la primera unidad lógica que corresponde a una unidad de CDROM. La función devuelve la cadena vacía ('') si no se encontró ninguna unidad de CDROM.

uses Windows;

function GetFirstCdRomDrive: string;
var
  r: LongWord;
  Unidades: array[0..128] of char;
  pUnidad: pchar;
begin
  Result := '';
  r := GetLogicalDriveStrings(sizeof(Unidades), Unidades);
  if r = 0 then exit;
  if r > sizeof(Unidades) then
    raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY));
  pUnidad := Unidades;  // Apunta a la primera unidad
  while pUnidad^ <> #0 do begin
    if GetDriveType(pUnidad) = DRIVE_CDROM then begin
      Result := pUnidad;
      exit;
    end;
    inc(pUnidad, 4);  // Apunta a la siguiente unidad
  end;
end;

Llamada de ejemplo

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetFirstCdRomDrive);
end;
JfControls Library - para Delphi y C++ Builder