Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

КАК УЗНАТЬ СЕРИЙНИК HDD?   Найти похожие ветки 

 
D3viL   (2004-08-26 15:09) [0]

КАК УЗНАТЬ СЕРИЙНИК HDD?


 
Семен Сорокин ©   (2004-08-26 15:15) [1]

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение сведений о диске (метка/имя диска, файловая система, серийный номер)

Получение информации о любом диске.
Работает на FDD, HDD, CD, другие не пробовал.

Создайте модуль с именем HDDInfo и полностью скопируйте в него весь текст.

Зависимости: Все Windows (32S,95,NT)
Автор:       cyborg, cyborg1979@newmail.ru, ICQ:114205759, БузулукCopyright:   Собственное написание (Осипов Евгений Анатольевич)
Дата:        23 мая 2002 г.
***************************************************** }

unit HDDInfo;

interface
Uses Windows;

Const {Константы для TypeOfDisk функции GetDisks}
DiskUnknown=0; {Неизвестные диски}
DiskNone=1; {Отсутствующие диски}
DiskFDD=DRIVE_REMOVABLE; {Съёмные диски, дискеты}
DiskHDD=DRIVE_FIXED; {Не съёиные диски, жёсткие диски}
DiskNet=DRIVE_REMOTE; {Сетевые диски}
DiskCDROM=DRIVE_CDROM; {CD ROM}
DiskRAM=DRIVE_RAMDISK; {Диски в ОЗУ}

{Получить имена нужных дисков}
function GetDisks(TypeOfDisk : Word) : String;

{Функция получения информации о диске (HDD,FDD,CD) с буквой Disk}
{
Передаваемые значения:
Disk - Буква диска

Получаемые значения:
VolumeName - Метка/Имя тома
FileSystemName - Файловая система
VolumeSerialNo - Серийный номер диска (можно привязывать к диску ! программы)
MaxComponentLength - Максимальная длинна имени файла
FileSystemFlags - Флаги смотрите в справке Delphi по GetVolumeInformation

Функция возвращает true, если всё прошло успешно (диск нашёлся),
и false, если возникли проблемы, например диска нет в дисководе,
либо дисковода такого вообще нет
}
Function GetHDDInfo(Disk : Char;Var VolumeName, FileSystemName : String;
       Var VolumeSerialNo, MaxComponentLength, FileSystemFlags:LongWord) : Boolean;

implementation

function GetDisks(TypeOfDisk : Word) : String;{Получить имена нужных дисков}
var
DriveArray : array[1..26] of Char;
I : integer;
begin
DriveArray:="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for I := 1 to 26 do
if GetDriveType(PChar(DriveArray[I]+":\")) = TypeOfDisk then Result := Result+DriveArray[I];
end;

Function GetHDDInfo(Disk : Char;Var VolumeName, FileSystemName : String;          Var VolumeSerialNo, MaxComponentLength, FileSystemFlags:LongWord) : Boolean;
Var
_VolumeName,_FileSystemName:array [0..MAX_PATH-1] of Char;
_VolumeSerialNo,_MaxComponentLength,_FileSystemFlags:LongWord;
Begin
if GetVolumeInformation(PChar(Disk+":\"),_VolumeName,MAX_PATH,@_VolumeSerialNo,
_MaxComponentLength,_FileSystemFlags,_FileSystemName,MAX_PATH) then
Begin
  VolumeName:=_VolumeName;
  VolumeSerialNo:=_VolumeSerialNo;
  MaxComponentLength:=_MaxComponentLength;
  FileSystemFlags:=_FileSystemFlags;
  FileSystemName:=_FileSystemName;
  Result:=True;
End else Result:=False;
End;
end.

Пример использования:
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[I], VolumeName, FileSystemName, VolumeSerialNo,
              MaxComponentLength, FileSystemFlags) then {... тогда собираем информацию}
SOut:=SOut+
"Диск: "+S[I]+#13#10+
"Метка: "+VolumeName+#13#10+
"Файловая система: "+FileSystemName+#13+#10+
"Серийный номер: "+IntToHex(VolumeSerialNo,8)+#13+#10+
"Макс. длина имени файла: "+IntToStr(MaxComponentLength)+#13+#10+
&n! bsp;"Flags: "+IntToHex(FileSystemFlags,4)+#13#10+#13#10;
End;
Disks.Caption:=SOut; {Выводим в компонент TLabel полученные данные о дисках}
end;


 
s999   (2004-08-26 15:27) [2]

Гм....

Это вернет Serial ЛОГИЧЕСКОГО диска, который, например, после форматирования станет другим. Вопрос вроде чуть о другом. А если нет, то зачем так длинно? Достаточно:

if GetVolumeInformation(PChar(Disk+":\"),...  then
 Result := IntToHex(HiWord(Ser),4) + "-" + IntToHex(LoWord(Ser),4);


 
Amoeba ©   (2004-08-26 17:47) [3]

http://home.earthlink.net/~akonshin/delphi_ru.htm
там найдешь вот это:
http://home.earthlink.net/~akonshin/files/IdeInfo2.zip


 
RagE ©   (2004-08-26 17:49) [4]

где то я в одной из веток видел ссылку на сайт, там есть модули которые определяют не только серийник ФИЗИЧЕСКОГО диска, поищи, он где то рядом


 
Amoeba ©   (2004-08-26 18:06) [5]


> RagE ©   (26.08.04 17:49) [4]

Ничего искать не надо! Нужные ссылки я уже дал.
http://home.earthlink.net/~akonshin/delphi_ru.htm

IdeInfo2 - получение различной информации об IDE диске (IdeInfo2.zip, 30 Jul 2000, 27K, D3+) С помощью SMART Ioctl API можно получить модель, версию прошивки, серийный номер, состояния различных счетчиков IDE винчестера. Проверялось на Windows 98, Windows NT 4.0 и Windows 2000.


 
Alex Konshin ©   (2004-08-26 20:32) [6]

Как приятно... Уже можно со спокойной совестью на пенсию уходить.
:)
Только лучше все-таки посмотреть на IdeSN2 или IdeSN3b, они хотя бы именно s/n выдают.


 
Дмитрий Ботвин   (2004-08-27 12:42) [7]

Вот, наверное, самый простой вариант:

function GetHDDNumber: DWORD;
 var
   NotUsed:     DWORD;
   VolumeFlags: DWORD;
   VolumeSerialNumber: DWORD;
 begin
   GetVolumeInformation(PChar("C:\"),nil,100,
                        @VolumeSerialNumber,NotUsed,VolumeFlags,nil,0);
   Result:=VolumeSerialNumber;
 end;


 
Alex Konshin ©   (2004-08-28 07:45) [8]

Вот, наверное, самый простой вариант:
Только он не делает того, чего требуется.



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
1-1095059792
anonymous
2004-09-13 11:16
2004.10.03
Разбиение файла на части


3-1094167004
O l e g
2004-09-03 03:16
2004.10.03
Переполнение стека, что это?


14-1094707224
kaZaNoVa
2004-09-09 09:20
2004.10.03
Потокобезопасность или как написать потокобезопасный код ?


1-1095342962
stud
2004-09-16 17:56
2004.10.03
необходимо выделить фрагмент изображения


8-1089107085
Aplay
2004-07-06 13:44
2004.10.03
Приближение и отдалиние изображении