Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Работа с дисками!   Найти похожие ветки 

 
Александр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), ...


 
©   (2004-08-17 06:45) [2]

GetVolumeInformation(PChar(h),...


 
Alex Konshin ©   (2004-08-17 11:07) [3]

Опять снова-здорова.
Это серийный номер не диска, а тома.
И информация тоже о томе.



Страницы: 1 вся ветка

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.052 c
3-1093660094
mr.dfox
2004-08-28 06:28
2004.09.26
Ввод времени в DBGrid.


14-1094449787
cyborg
2004-09-06 09:49
2004.09.26
Замкнутый круг


1-1095052021
pavel777
2004-09-13 09:07
2004.09.26
DLL_PROCESS_DETACH


3-1093584135
Dual
2004-08-27 09:22
2004.09.26
Проблема с базами или что же выбрать?


14-1094238166
KilkennyCat
2004-09-03 23:02
2004.09.26
Предложение модераторам.