Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

КАК УЗНАТЬ СЕРИЙНИК 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.039 c
14-1095345159
}|{yk
2004-09-16 18:32
2004.10.03
Проект "Футбольный прогнозы"


1-1095355017
slaviq
2004-09-16 21:16
2004.10.03
Есть такая ф-я для парсинга строки - напомните кто знает плз.


14-1094718078
Knight
2004-09-09 12:21
2004.10.03
Вы когда-нибудь пытались...


14-1094455946
1008
2004-09-06 11:32
2004.10.03
Вдруг кому интересно.


4-1093545179
Editor
2004-08-26 22:32
2004.10.03
Выделенный текст





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский