La función IsDiskIn presentada aquí determina si una unidad de discos removibles está vacía o no

Determinando si hay un disco/diskette/CD en una unidad de discos removibles

Copyright © 2000 Ernesto De Spirito

EurekaLog - Capture y registre cada excepción!

IsDiskIn

El truco es llamar a la API GetDiskFreeSpace y devolver su valor de retorno como boolean. La siguiente función toma la letra de la unidad que se recibe como parámetro (por ejemplo 'A', 'D', etc.) y devuelve True si hay un disco en la unidad, o False si no es así.

uses Windows;

var
  CaminoUnidad: array [0..3] of char = 'A:\';

function IsDiskIn(unidad: char): boolean;
var
  d1, d2, d3, d4: longword;
begin
  CaminoUnidad[0] := unidad;
  Result := GetDiskFreeSpace(CaminoUnidad, d1, d2, d3, d4);
end;

En la implementación usamos una cadena terminada en nulo inicializada (CaminoUnidad) que contiene el directorio raíz de la unidad A: y sustituimos la letra de la unidad por la que se pasa como parámetro antes de llamar a GetDiskFreeSpace.

Llamada de ejemplo

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not IsDiskIn('A') then
    ShowMessage('La unidad A: no está lista');
end;
JfControls Library - para Delphi y C++ Builder