Другие языки программирования и технологии

Нужен код под delphi 7, которая будет определять серийный номер винчестера в XP и Vista ...Куплю

Интресует серийный номер самого диска, или логического? Это не одно и тоже.
Логический диск (или том) имеет свой серийный номер. Но с собственно железякой он никак не связан. При переформатировании тома его серийный номер измениться.
Получить серийные номер железяки сложнее. Зависит от типа контроллера (IDE, SATA, RAID). Иногда вообще невозможно. Например, если RAID контроллером смонтировать один виртуальный диск из нескольких, то добраться до параметров реальных дисков будет невозможно.
Данила Чернов
Данила Чернов
21 360
Лучший ответ
USES ...HDDInfo; {Добавляем наш модуль}
{Нужно создать на форме компонент TLabel, Name которого ставим в Disks}
{И в событии главной формы OnActicate написать это: }
procedure TMyForm.FormActivate(Sender: TObject);
Var
S,SOut : String;
I : Integer;
VolumeName,FileSystemName : String;
VolumeSerialNo,MaxComponentLength,FileSystemFlags:LongWord;
begin
S:=GetDisks(DiskHDD); {Получаем список Жёстких дисков (Параметр DiskHDD)}
SOut:='';
For I:=1 to Length(S) do {Получаем информацию о всех дисках и пишем в TLabel на форме}
Begin
{Если диск существует/вставлен ...}
if GetHDDInfo(S, VolumeName, FileSystemName, VolumeSerialNo,
MaxComponentLength, FileSystemFlags) then {... тогда собираем информацию}
SOut:=SOut+
'Диск: '+S+#13#10+
'Метка: '+VolumeName+#13#10+
'Файловая система: '+FileSystemName+#13+#10+
'Серийный номер: '+IntToHex(VolumeSerialNo,8)+#13+#10+
'Макс. длина имени файла: '+IntToStr(MaxComponentLength)+#13+#10+
'Flags: '+IntToHex(FileSystemFlags,4)+#13#10+#13#10;
End;

Disks.Caption:=SOut; {Выводим в компонент TLabel полученные данные о дисках}
end;

************************************************

function SirealNumberDisk(disk: string): string;
// Определяем серийный номер диска

var
VolumeName : array [0..MAX_PATH-1] of Char;
FileSystemName : array [0..MAX_PATH-1] of Char;
VolumeSerialNo : DWord;
MaxComponentLength : DWord;
FileSystemFlags : DWord;

function GetReplaceCDNumber(num: String): String;
var
i, len: Integer;
begin
Result:= '';
len:= Length(num);
if len <> 8 then exit;
for i:= 1 to (len div 2) do begin
Dec(len);
Result:= Result + num[len ];
Result:= Result + num[len + 1];
Dec(len);
end;
end;

begin
GetVolumeInformation(PChar(disk), VolumeName, MAX_PATH, @VolumeSerialNo, MaxComponentLength,
FileSystemFlags, FileSystemName, MAX_PATH);
Result:= IntToHex(Integer(VolumeSerialNo), 8);
if Win32Platform <> VER_PLATFORM_WIN32_NT then
Result:= GetReplaceCDNumber(Result);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:= SirealNumberDisk('f:\');
end;
Андрей Паскаль
Андрей Паскаль
30 251
Пиши на мыло.