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

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

КАК УЗНАТЬ СЕРИЙНИК HDD? [D6, D7, Win95/98, Win2k, WinXP]


D3viL ©   (2004-08-26 15:09:00) 

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


Alex Konshin   (2004-08-28 07:45:00) [1]

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


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

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

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-26 20:32:00) [3]

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


Amoeba   (2004-08-26 18:06:00) [4]


> 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.


RagE   (2004-08-26 17:49:00) [5]

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


Amoeba   (2004-08-26 17:47:00) [6]

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


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

Гм....

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

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


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

{ **** 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;


Наверх

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