Форум: "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.035 c