Hola de nuevo.
Saliéndome un poco del planteo inicial de
danielmj...
Código Delphi
[-]
...
procedure TForm1.FormCreate(Sender: TObject);
var
Device : DWORD;
U : string;
i : Integer;
begin
Device := GetLogicalDrives;
for i := 1 to 32 do
if Device shr i and 1 = 1 then
begin
U:= Chr(Ord('A') + i) + ':';
if GetDriveType(PChar(U)) in [DRIVE_REMOVABLE, DRIVE_FIXED] then
ComboBox1.Items.Add(U);
end;
ComboBox1.ItemIndex := 0;
end;
function DriveReady(Drv: string): Boolean;
var
MaxLen, SysFlags: DWORD;
SNumber: DWORD;
OldErr,Error : DWORD;
Msg : string;
begin
OldErr := SetErrorMode(SEM_FAILCRITICALERRORS);
try
if GetVolumeInformation(PChar(Drv+'\'),nil,0,@SNumber,MaxLen,SysFlags,nil,0) then
Result:= True
else
begin
Error := GetLastError;
case Error of
ERROR_INVALID_NAME : Msg := 'Nobre de archivo, de directorio o etiqueta de volumen inválido';
ERROR_PATH_NOT_FOUND : Msg := 'Ruta no encontrada';
ERROR_TOO_MANY_OPEN_FILES: Msg := 'Demasiados archivos abiertos';
ERROR_ACCESS_DENIED : Msg := 'Acceso denegado';
ERROR_WRITE_PROTECT : Msg := 'Unidad protegida contra escritura';
ERROR_NOT_READY : Msg := 'La unidad no esta lista';
ERROR_NOT_DOS_DISK : Msg := 'El disco especificado no puede ser accedido';
ERROR_HANDLE_DISK_FULL : Msg := 'Disco lleno';
ERROR_INVALID_DRIVE,
ERROR_BAD_UNIT : Msg := 'No se puede encontrar la unidad especificada';
end;
raise Exception.Create(Msg);
end;
finally
SetErrorMode(OldErr);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if DriveReady(ComboBox1.Text) then
begin
end;
end;
Para contemplar mas errores revisa:
System Error Codes
Saludos