Форум: "Система";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
Внизназвание метки жесткого диска Найти похожие ветки
← →
Dennis S (2002-07-29 13:55) [0]Кто знает как выдернуть (прочесть) название метки жесткого диска?
← →
Song (2002-07-29 14:07) [1]Как и любого другого диска - GetVolumeInformation()
← →
Poirot (2002-07-30 01:15) [2]"название метки жесткого диска" - я конечно не филолог но что это такое....
← →
Jaroslaw (2002-07-30 09:10) [3]По нажатию на кнопку в поле ввода класса TMemo будут выводиться сведения об указанном вами диске:
procedure TForm1.Button2Click(Sender: TObject);
var
VolumeName,
FileSystemName : array [0..MAX_PATH-1] of Char;
VolumeSerialNo : DWord;
MaxComponentLength,FileSystemFlags: Cardinal;
begin
GetVolumeInformation("C:\",VolumeName,MAX_PATH,@VolumeSerialNo,
MaxComponentLength,FileSystemFlags,
FileSystemName,MAX_PATH);
Memo1.Lines.Add("VolumeName = "+VolumeName);
Memo1.Lines.Add("SerialNo = $"+IntToHex(VolumeSerialNo,8));
Memo1.Lines.Add("CompLen = "+IntToStr(MaxComponentLength));
Memo1.Lines.Add("Flags = $"+IntToHex(FileSystemFlags,4));
Memo1.Lines.Add("FSName = "+FileSystemName);
end;
← →
Raiv (2002-07-31 08:18) [4]Взято на этом форуме - работает безупречно.
{ **** 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+
"Flags: "+IntToHex(FileSystemFlags,4)+#13#10+#13#10;
End;
Disks.Caption:=SOut; {Выводим в компонент TLabel полученные данные о дисках}
end;
← →
Dennis S (2002-07-31 17:54) [5]Всем спасибо!
...особенно, 2 Raiv
Информации более чем...
:)
← →
Ihor Osov'yak (2002-08-01 01:31) [6]Молодые люди, не заблуждайтесь - вы получили инфо о логическом
диске, а не о физическом. Форматирование тома изменит эту инфу.
Для доступа к serial number изготовителя (тот номерок, что продавец пишет в гарантийном талончике), придется поработать с портами контролера напрямую или воспользоватся сервисом WMI (не уверен во второй части).
Работающий исходник для первого варианта гте-то уже пробегал, кажись на sysinternals.com, но снова не уверен . И на С, и с заюзыванием кода в нулевом кольце, по бишь драйверов ...
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c