Форум — Ответы     (  К темам )
 ?  Dimman: логические диски (18-01-2003 18:05:04)
Надо узнать количество локальных "жёстких" дисков на отдельно взятом компе.
Т.е. "Всего дисков минус дисководы, мунус сетевые, минус CD и виртуальные".
В какую сторону копать?
 Владимир (19-01-2003 13:12:43)
Можно:
1 Воспользоваться компонентом DriveComboBox
2.Функции
GetLogicalDrives() ,GetLogicalDriveStrings() — получить список логических дисков
GetDriveType() — получить информацию о логическом диске

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char buff[60];
ZeroMemory(buff,60);
GetLogicalDriveStrings(60,buff);
for(int i = 0; i< 60; i++){
Label1->Caption = Label1->Caption + buff[i]+ " ";
}
}

//-----

void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString Root = "#:\\";
for(int i = 0; i<25; i++){
Root[1] = 'A' + i;
switch(GetDriveType(Root.c_str())){
case 0 : ShowMessage("The drive type cannot be determined"); break;
case 1 : ShowMessage("The root directory does not exist"); break;
case DRIVE_REMOVABLE: ShowMessage("The disk can be removed"); break;
case DRIVE_FIXED : ShowMessage("The disk cannot be removed"); break;
case DRIVE_REMOTE : ShowMessage("The drive is remote (network) drive"); break;
case DRIVE_CDROM : ShowMessage("The drive is a CD-ROM drive"); break;
case DRIVE_RAMDISK : ShowMessage("The drive is a RAM disk"); break;
}
}
}
//-----
 Devnvd (19-01-2003 13:54:20)
Если пройти по всем логическим дискам с функциями
GetDriveType("A:\\",...
GetVolumeInformation("A:\\",...
То по первой можно узнать о типе: Network,Fixed,Removable,CDROM,RAM...
А по второй узнать индивидуальные характеристики: серийный номер, имя,...
Определив уникальные неповторяющиеся вы получите нужное число.
Эти две функции работают и для Win9x и NT-систем.