Форум: "WinAPI";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Внизнужно получить список установленых винчестеров Найти похожие ветки
← →
Relaxxx (2004-12-11 23:06) [0]Здраствуйте!
нужно получить список установленых винчестеров, с указанием их Модели, Типа(IDE, SCSI) и главное серийного номера винчестера, это вообще возможно узнать?
← →
GanibalLector © (2004-12-11 23:13) [1]GetLogicalDrives,GetDriveType,GetVolumeInformation
← →
GanibalLector © (2004-12-11 23:28) [2]Кстати,примерчик завалялся.Естественно,он не рашает ВСЕХ твоих проблем,но кое-что есть.
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;
← →
grom (2004-12-15 17:27) [3]список установленых винчестеров, с указанием их Модели(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;
← →
GuAV © (2004-12-15 21:57) [4]
>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;
← →
Vit@ly © (2004-12-15 22:38) [5]Сторонний компонент MiTec
определяет не толко это, но и многое другое
← →
Vit@ly © (2004-12-15 22:40) [6]Сорри, промахнулся веткой (WinAPI)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c