Листинг 4.6.
Определение типа носителя диска
function GetDriveTypeName(root: String): String;
begin
case GetDriveType(PAnsiChar(root)) of
DRIVE_UNKNOWN: GetDriveTypeName := \'Не определен\
DRIVE_REMOVABLE: GetDriveTypeName := \'Сменный\
DRIVE_FIXED: GetDriveTypeName := \'Фиксированный\
DRIVE_REMOTE: GetDriveTypeName := \'Удаленный (сетевой)\
DRIVE_CDROM: GetDriveTypeName := \'Компакт-диск\
DRIVE_RAMDISK: GetDriveTypeName := \'RAM-диск\
else
GetDriveTypeName := \'\' //Возвращается в случае ошибки
end;
end;
Изменение метки диска
Как вы думаете, сложно ли изменить метку диска? Совсем нет: вся сложность состоит в отыскании нужной функции. В данном случае можно применить API-функцию SetVolumeLabel (листинг 4.7).
Листинг 4.7.
Изменение метки диска
function SetDriveLabel(root, newLabel: String): Boolean;
begin
SetDriveLabel :=
SetVolumeLabel(PAnsiChar(root), PAnsiChar(newLabel)) <> False;
end;
В листинге 4.7 приведена функция-оболочка для API-функции изменения метки диска, избавляющая нас от необходимости преобразования типов и интерпретации значения, возвращаемого API-функцией.
Программа просмотра свойств дисков
В завершение темы работы с дисками рассмотрим еще небольшой пример, обобщающий сказанное выше. Для этого создадим небольшое приложение, выводящее информацию о любом из дисков компьютера. Приложение должно использовать возможности всех рассмотренных выше функций.
Окно этого приложения приведено на рис. 4.1.
Рис. 4.1. Окно с информацией о дисках
Работа формы, приведенной на рис. 4.1, организована предельно просто. Сначала при создании формы получаем список дисков (а также выделяем первый диск и загружаем информацию о нем) (листинг 4.8).
Листинг 4.8.
Составление списка дисков
procedure TForm1.FormCreate(Sender: TObject);
begin
//Загрузка букв дисков
if GetDriveLetters(cboDrives.Items) > 0 then
begin
//Выделим первый диск
cboDrives.ItemIndex := 0;
cboDrivesSelect(self);
end
else
Button1.Enabled := False;
end;
Загрузка информации о дисках происходит при выборе буквы диска в списке (листинг 4.9).