Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
ВнизРабота с дисками! Найти похожие ветки
← →
Александр1 (2004-08-17 06:09) [0]Здравствуйте уважаемые мастера!
Вот алгоритм для определения информации о диске. А в частности определения серийного номера диска:
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
SerialNum : pdword;
a, b : Cardinal;
Buffer : array [0..MAX_PATH-1] of char;
begin
new(SerialNum);
if GetVolumeInformation(‘C:\’, Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then
Label1.Caption:= IntToStr(SerialNum^);
dispose(SerialNum);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
VolumeName,
FileSystemName : array [0..MAX_PATH-1] of Char;
MaxComponentLength, FileSystemFlags : Cardinal;
VolumeSerialNo : DWord;
begin
if GetVolumeInformation(‘C:\’,VolumeName,MAX_PATH,@VolumeSerialNo,
MaxComponentLength,FileSystemFlags,
FileSystemName,MAX_PATH) then
begin
Memo1.Lines.Add("VName = "+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;
end;
end.
ДАННЫЙ ПРИМЕР РАБОТАЕТ!
Но в данном примере необходимо тип диска указывать ‘С:\’, А если сделать так:
var
Form1: TForm1;
h:string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
SerialNum : pdword;
a, b : Cardinal;
Buffer : array [0..MAX_PATH-1] of char;
begin
h:="C:\";
new(SerialNum);
if GetVolumeInformation(h, Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then
Label1.Caption:= IntToStr(SerialNum^);
dispose(SerialNum);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
VolumeName,
FileSystemName : array [0..MAX_PATH-1] of Char;
MaxComponentLength, FileSystemFlags : Cardinal;
VolumeSerialNo : DWord;
begin
if GetVolumeInformation(h,VolumeName,MAX_PATH,@VolumeSerialNo,
MaxComponentLength,FileSystemFlags,
FileSystemName,MAX_PATH) then
begin
Memo1.Lines.Add("VName = "+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;
end;
end.
Где h – string. ЭТОТ ПРИМЕР НЕ РАБОТАЕТ, ХОТЯ ЕГО СУТЬ ОСТАЛАСЬ ТОЙЖЕ.
Помогите пожалуйста сделать так чтобы второй вариант программы работал!
Заранее спасибо за помощь!
← →
Dyn`alt © (2004-08-17 06:38) [1]Нужно привести string к PChar
GetVolumeInformation(PChar(h), ...
← →
R © (2004-08-17 06:45) [2]GetVolumeInformation(PChar(h),...
← →
Alex Konshin © (2004-08-17 11:07) [3]Опять снова-здорова.
Это серийный номер не диска, а тома.
И информация тоже о томе.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c