Главная страница
    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.47 MB
Время: 0.037 c
3-1093942389
Zilog
2004-08-31 12:53
2004.10.03
Не удаляется запись из базы


1-1095250634
bloodman
2004-09-15 16:17
2004.10.03
Как пройтись по всем компонентам на форме в рантайм.


14-1094888235
Piter
2004-09-11 11:37
2004.10.03
Какая температура в ванной?


1-1095186957
wl
2004-09-14 22:35
2004.10.03
Как узнать Handle (HWND) кнопок на TaskBar e?


4-1093528246
RagE
2004-08-26 17:50
2004.10.03
ALT+key





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский