Главная страница
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.021 c
14-1093665713
Григорьев Антон
2004-08-28 08:01
2004.09.26
211.34.96.11 - адрес трусливого ничтожества


14-1094333382
olookin
2004-09-05 01:29
2004.09.26
Как смертник скребет по бумаге...


4-1092397878
Сергей В. М.
2004-08-13 15:51
2004.09.26
Извенить текст StatusBar a в чужом приложении.


4-1092900410
Lizka
2004-08-19 11:26
2004.09.26
Как узнать версию офис из программы?


14-1094536623
Леван
2004-09-07 09:57
2004.09.26
Лазерный принитер