Как проверить, есть ли диск в дисководе (или
CD-ROM-e)
Способ 1:
Следующая функция в качестве параметра
принимает букву диска. Возвращаемое значение
сигнализирует о наличие диска в дисководе или
отсутствии:
function DiskInDrive(Drive: Char): Boolean;
var
ErrorMode: word;
begin
{ переводим в верхний регистр }
if Drive in ['a'..'z'] then Dec(Drive, $20);
{ убеждаемся, что это буква }
if not (Drive in ['A'..'Z']) then
raise EConvertError.Create('Not a valid drive ID');
{ отключаем критические ошибки }
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
try
{ диск 1 = a, 2 = b, 3 = c, и т.д. }
if DiskSize(Ord(Drive) - $40) = -1 then
Result := False
else
Result := True;
finally
{ восстанавливаем старый режим
ошибок }
SetErrorMode(ErrorMode);
end;
end;
Способ 2:
Для этого можно воспользоваться функцией
SetErrorMode, при помощи которой можно получить
необходимую информацию.
function DiskInDrive(lw: Char ): integer;
var
sRec: TSearchRec;
res: integer;
begin
Result:= 0;
SetErrorMode(SEM_FAILCRITICALERRORS);
result := False;
{$I-}
res := FindFirst(lw + ':\*.*', faAnyfile, SRec );
FindClose(SRec);
{$I+}
case res of
0 : Result := 0;
2,18 : Result := 1;
21,3 : Result := 2;
else
Result := res;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x: integer;
begin
x := DiskInDrive('a');
case x of
0: ShowMessage('Disk is there !');
1: ShowMessage('Disk is empty !');
2: ShowMessage('No disk in drive !');
else
ShowMessage('Disk not formatted !');
end; //case
end;
|