СообЧа > База Знаний > Программирование > Win32 API

Вопрос

Как узнать название диска, те обозначение (С, Д, Е…)?

Ответ

Есть функция GetLogicalDrives. Она возвращает целочисленное значение, в котором каждый бит отвечает за наличие соответствующего диска в системе:

А — бит 00
В — бит 01
С — бит 02

(все биты нумеруются с конца)

Пример (в Delphi):

var DrivesMask : Integer;
ch : char;
begin … DrivesMask := GetLogicalDrives;
for ch := 'a' to 'z' do begin
//перебираем по буквам
if LongBool(DrivesMask and 1) then
//проверяем самый первый бит …
//здесь делаете все, что хотите: диск с буквой равной ch
//присутствует в системе DrivesMask := DrivesMask shr 1;
//"сдвигаем" значение вправо,
//чтобы потом проверить следующий
//диск
end;
… end;


А вот как получить метки дисков:

{--------------------}
{ ПОЛУЧИТЬ ТИП ФАЙЛА }
{--------------------}
//это понадобится для Windows неNT function GetFileType(Path: String): String;
var SFI: TShFileInfo;
begin FillChar(SFI, sizeof(SFI), 0);
ShGetFileInfo(PChar(Path), 0, SFI, SizeOf(SFI), SHGFI_TYPENAME); Result :=
SFI.szTypeName; end;
{----------------------}
{ ПОЛУЧИТЬ МЕТКУ ДИСКА }
{----------------------}
const drv = ':\';
function GetLabelDisk(Ch: Char): String;
var st: String;
NotUsed, VolFlags: DWORD;
Buf: array [0..MAX_PATH] of Char;
begin st := '';
Buf[0] := #$00;
GetVolumeInformation(PChar(Ch + drv), Buf, DWORD(sizeof(Buf)), nil, NotUsed, VolFlags, nil, 0);
st := Buf;
if st = '' then st := GetFileType(Ch + drv);
//вот здесь та самая
//"совместимость"
Result := st;
end;


Все эти примеры взяты из очень хорошего компонента BAPDriveBox для библиотеки KOL. Компонент можно скачать по адресу
http://kol.mastak.ru
http://xcl.cjb.net

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация