Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

нужно получить список установленых винчестеров [D6, Win2k]


Relaxxx ©   (2004-12-11 23:06:00) 

Здраствуйте!
нужно получить список установленых винчестеров, с указанием их Модели, Типа(IDE, SCSI) и главное серийного номера винчестера, это вообще возможно узнать?


Vit@ly   (2004-12-15 22:40:00) [1]

Сорри, промахнулся веткой (WinAPI)


Vit@ly   (2004-12-15 22:38:00) [2]

Сторонний компонент MiTec
определяет не толко это, но и многое другое


GuAV   (2004-12-15 21:57:00) [3]


>const
>DriveConst: array[1..26] of DWord =
>   ($1,       $2,       $4,      $8,
>    $10,      $20,      $40,     $80,
>    $100,     $200,     $400,    $800,
>    $1000,    $2000,    $4000,   $8000,
>    $10000,   $20000,   $40000,  $80000,
>    $100000,  $200000,  $400000, $800000,
>     $1000000, $2000000);


Всё проще :-)

procedure TForm1.FormCreate(Sender: TObject);
var QQ: DWord; D: Char;
begin
 QQ := GetLogicalDrives();
 for D := 'A' to 'Z' do
 begin
   if Odd(QQ) then
     Combobox1.Items.Add(D + ':\');
   QQ := QQ shr 1;
 end;
end;


grom   (2004-12-15 17:27:00) [4]

список установленых винчестеров, с указанием их Модели(IDE, SCSI)
procedure TForm1.Button1Click(Sender: TObject);
var
R:TRegistry;
st,s,f:string;
i,c,d:byte;
begin
R:=TRegistry.Create;
R.Access:=KEY_READ;
R.RootKey:=HKEY_LOCAL_MACHINE;
// st:='SYSTEM\CurrentControlSet\Services\Cdrom\Enum';
st:='SYSTEM\CurrentControlSet\Services\Disk\Enum';
if not R.OpenKey(st,False) then Exit;
c:=R.ReadInteger('Count');
if c = 0 then Exit;
for i:= 0 to c - 1 do
begin
R.OpenKey(st,False);
s:=R.ReadString(IntToStr(i));
R.CloseKey;
if not R.OpenKey('SYSTEM\CurrentControlSet\Enum\'+s,False)then Exit;
d:=pos('\',s);
f:=copy(s,1,d-1);
// ListBox1.Items.Add(s);
ListBox1.Items.Add(IntToStr(i+1)+'.  '+f+'   '+R.ReadString('FriendlyName'));
R.CloseKey;
end;
R.Free;
end;


GanibalLector   (2004-12-11 23:28:00) [5]

Кстати,примерчик завалялся.Естественно,он не рашает ВСЕХ твоих проблем,но кое-что есть.

const
DriveConst: array[1..26] of DWord =
   ($1,       $2,       $4,      $8,
    $10,      $20,      $40,     $80,
    $100,     $200,     $400,    $800,
    $1000,    $2000,    $4000,   $8000,
    $10000,   $20000,   $40000,  $80000,
    $100000,  $200000,  $400000, $800000,
    $1000000, $2000000);

procedure TForm1.FormCreate(Sender: TObject);
var QQ,i:DWord;
begin
QQ:=GetLogicalDrives();
for i:=1 to 26 do
if (QQ and DriveConst[i])>0 then
Combobox1.Items.Add(chr($40+i)+':\');
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var st:string;
VolumeName,FileSystemName : array [0..MAX_PATH-1] of Char;
VolumeSerialNumber,MaximumComponentLength,FileSystemFlags:DWord;
SectorsPerCluster,BytesPerSector,NumberOfFreeClusters,TotalNumberOfClusters:DWord;
begin

SetErrorMode(SEM_FAILCRITICALERRORS);

case GetDriveType(PChar(Combobox1.Text)) of
0:                st:='Type :'+chr(09)+chr(09)+chr(09)+'Unknown'+#10#13;
1:                st:='Type :'+chr(09)+chr(09)+chr(09)+'No_ROOT_DIR'+#10#13; // if RootPathName=nil
DRIVE_REMOVABLE:  st:='Type :'+chr(09)+chr(09)+chr(09)+'Flopy'+#10#13;
DRIVE_FIXED:      st:='Type :'+chr(09)+chr(09)+chr(09)+'Hard'+#10#13;
DRIVE_REMOTE:     st:='Type :'+chr(09)+chr(09)+chr(09)+'Remote'+#10#13;
DRIVE_CDROM :     st:='Type :'+chr(09)+chr(09)+chr(09)+'CD-ROM'+#10#13;
DRIVE_RAMDISK:    st:='Type :'+chr(09)+chr(09)+chr(09)+'RAM-Disk'+#10#13;end;
st:=st+#10#13;

if GetVolumeInformation(Pchar(Combobox1.Text),VolumeName,MAX_PATH,
@VolumeSerialNumber,MaximumComponentLength,FileSystemFlags,FileSystemName,MAX_PATH)=true  then
       begin
st:=st+'Name :'       +chr(09)+chr(09)+chr(09)+VolumeName+#10#13;
st:=st+'Serial :'     +chr(09)+chr(09)+chr(09)+inttohex(VolumeSerialNumber,8)+#10#13;
st:=st+'Length :'     +chr(09)+chr(09)        +inttostr(MaximumComponentLength)+#10#13;
st:=st+'File system :'+chr(09)+chr(09)        +FileSystemName+#10#13;
       end
else st:=st+'Drive not ready'+#10#13; //ShowMessage(SysErrorMessage(GetLastError));
st:=st+#10#13;

if GetDiskFreeSpace(Pchar(Combobox1.Text),SectorsPerCluster,
BytesPerSector,NumberOfFreeClusters,TotalNumberOfClusters)=true then
       begin
st:=st+'SectorsPerCluster :'+chr(09)+inttostr(SectorsPerCluster)+#10#13;
st:=st+'BytesPerSector : '+chr(09)+inttostr(BytesPerSector)+#10#13;
st:=st+#10#13;
st:=st+'FreeClusters : '+chr(09)+chr(09)+inttostr(NumberOfFreeClusters)+#10#13;
st:=st+'BusyClusters :'+chr(09)+chr(09)+inttostr(TotalNumberOfClusters-NumberOfFreeClusters)+#10#13;
st:=st+'TotalClusters :'+chr(09)+chr(09)+inttostr(TotalNumberOfClusters)+#10#13;
st:=st+#10#13;
st:=st+'FreeBytes :'+chr(09)+chr(09)+inttostr(NumberOfFreeClusters*(Int64(BytesPerSector*SectorsPerCluster)))+#10#13;
st:=st+'Busy :'+chr(09)+chr(09)+chr(09)+inttostr(TotalNumberOfClusters*(Int64(BytesPerSector*SectorsPerCluster))-
NumberOfFreeClusters*(Int64(BytesPerSector*SectorsPerCluster)))+#10#13;
st:=st+'TotalBytes :'+chr(09)+chr(09)+inttostr(TotalNumberOfClusters*(Int64(BytesPerSector*SectorsPerCluster)))+#10#13;
       end;

messagedlg(Pchar(st),MtInformation,[MbOk],0);
end;


GanibalLector   (2004-12-11 23:13:00) [6]

GetLogicalDrives,GetDriveType,GetVolumeInformation


Наверх

Титульная страница Поиск, карта сайта Написать письмо