Проверка готовности диска А:

type
TDriveState( DS_NO_DISK, DS_UNFORMATTED_DISK, DS_EMPTY_DISK,
DS_DISK_WITH_FILES );

Function DriveState( driveletter: Char ): TDriveState;
Var
mask: String[6];
sRec: TSearchRec;
oldMode: Cardinal;
retcode: Integer;
Begin
oldMode: = SetErrorMode( SEM_FAILCRITICALERRORS );
mask:= '?:\*.*';
mask[1] := driveletter;
{$I-}  { не возбуждаем исключение при неудаче }
retcode := FindFirst( mask, faAnyfile, SRec );
FindClose( SRec );
{$I+}
Case retcode Of
0: Result := DS_DISK_WITH_FILES;  { обнаружен по крайней мере один файл }
-18: Result := DS_EMPTY_DISK;       { никаких файлов не обнаружено, но ok }
-21: Result := DS_NO_DISK;          { DOS ERROR_NOT_READY }
Else
Result := DS_UNFORMATTED_DISK;     { в моей системе значение равно -1785!}
End;
SetErrorMode( oldMode );
End; { DriveState }

Я тестировал код под Win NT 3.5, так что проверьте его на ошибки в ситуациях, когда дискета отсутствует или неотформатирована под Win 3.1 и WfW 3.11, если, конечно, это необходимо.

Ревизия для Win95:

case RetCode of
0: Result := DS_DISK_WITH_FILES;
-18: Result := DS_EMPTY_DISK;
else
Result := DS_NO_DISK;
end;

 
« Предыдущая статья   Следующая статья »