2009. március 14., szombat

How to check if a drive is ready


Problem/Question/Abstract:

How can I check if there is a disk in the "A" drive without an error message box telling you that it is not ready?

Answer:

The following function accepts a drive letter as a parameter, and it will return a boolean value that indicates whether or not there is a disk in the drive.


function DiskInDrive(Drive: Char): Boolean;
var
  ErrorMode: word;
begin
  {make it upper case}
  if Drive in ['a'..'z'] then
    Dec(Drive, $20);
  {make sure it's a letter}
  if not (Drive in ['A'..'Z']) then
    raise EConvertError.Create('Not a valid drive ID');
  {turn off critical errors}
  ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
  try
    { drive 1 = a, 2 = b, 3 = c, etc.}
    if DiskSize(Ord(Drive) - $40) = -1 then
      Result := False
    else
      Result := True;
  finally
    {restore old error mode}
    SetErrorMode(ErrorMode);
  end;
end;

Nincsenek megjegyzések:

Megjegyzés küldése