Интресует серийный номер самого диска, или логического? Это не одно и тоже.
Логический диск (или том) имеет свой серийный номер. Но с собственно железякой он никак не связан. При переформатировании тома его серийный номер измениться.
Получить серийные номер железяки сложнее. Зависит от типа контроллера (IDE, SATA, RAID). Иногда вообще невозможно. Например, если RAID контроллером смонтировать один виртуальный диск из нескольких, то добраться до параметров реальных дисков будет невозможно.
Другие языки программирования и технологии
Нужен код под delphi 7, которая будет определять серийный номер винчестера в XP и Vista ...Куплю
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;
{Нужно создать на форме компонент 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;
Пиши на мыло.
Похожие вопросы
- Разница между XP и Vista...
- Установка XP вместо VISTA
- Как в Delphi 7 перенести в коде строку, превышено ограничение в 255 символов
- Что предпочтительней Delphi 7 или Delphi 2009? И почему?
- Люди у кавонить есть прога на Delphi 7??
- Какой язык лучше учить Delphi 7 или C++ ?
- Язык delphi 7 устарел ??? просто хотел учить delphi 7 но сейчас кто то сказал что устарел
- Помогите с кодом в Delphi, пожалуйста!
- нужен серийный номер для Cinema 4D R14
- Какова стоимость? Какова стоимость Borland Delphi 7? И что лучше delphi или lazarus? И почему?