Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
Александр1   (2004-08-17 19:47) [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. ЭТОТ ПРИМЕР НЕ РАБОТАЕТ, ХОТЯ ЕГО СУТЬ ОСТАЛАСЬ ТОЙЖЕ.
Помогите пожалуйста сделать так чтобы второй вариант программы работал!
Заранее спасибо за помощь!


 
xman ©   (2004-08-17 20:36) [1]

я делал так
(pchar(DriveComboBox1.drive+":\"),....)

или просто pchar(h)
смотря что там в H


 
xman ©   (2004-08-17 20:36) [2]

я делал так
(pchar(DriveComboBox1.drive+":\"),....)

или просто pchar(h)
смотря что там в H


 
Fay ©   (2004-08-17 20:42) [3]

М.б. не в тему, но извращение

var
 SerialNum : pdword;
...
begin
 new(SerialNum);
 if GetVolumeInformation(h, Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then
Label1.Caption:= IntToStr(SerialNum^);
 dispose(SerialNum);

можно заменить на

var
 SerialNum : pdword;
...
begin
 if GetVolumeInformation(h, Buffer, SizeOf(Buffer), @SerialNum, a, b, nil, 0) then
Label1.Caption:= IntToStr(SerialNum^);


 
8ung   (2004-08-17 23:26) [4]

function GetVolumeInformation(lpRootPathName: PChar;  lpVolumeNameBuffer: PChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD;
 var lpMaximumComponentLength, lpFileSystemFlags: DWORD;
 lpFileSystemNameBuffer: PChar; nFileSystemNameSize: DWORD): BOOL;

Т.к. h - string, а lpRootPathName - Pchar, то нужно h преобразовать в pchar, т.е. писать pchar(h)...


 
Alex Konshin ©   (2004-08-17 23:28) [5]

Опять двадцать пять.

Это получение информации и серийного номера тома, а не диска.


 
Burmistroff   (2004-08-18 00:03) [6]

тогда уж заменить на:

var
SerialNum : DWORD;
...
begin
h:="C:\";
if GetVolumeInformation(pchar(h), Buffer, SizeOf(Buffer), @SerialNum, a, b, nil, 0) then
Label1.Caption:= IntToStr(SerialNum);

По поводу темы -- серийные номера томов (как правильно заметил Alex Konshin) меняются просто и часто, опасно к ним привязываться!


 
Александр1   (2004-08-19 17:58) [7]

Спасибо на род за помощь, а то я давно уже мучился с этим серийными номерами.
К стати код:
var
SerialNum : DWORD;
...
begin
h:="C:\";
if GetVolumeInformation(pchar(h), Buffer, SizeOf(Buffer), @SerialNum, a, b, nil, 0) then
Label1.Caption:= IntToStr(SerialNum);

Даёт как я понял номер тома, а не диска. Т.к. у меня один винчестер, но он разбит Fdisk-ом на две чести (С и D). При проверки номера прога показывает разные. Но диск та один.
Серийный номер диска в данном случае можно узнать или нет?
И  как на счёт procedure TForm1.Button2Click(Sender: TObject); ………


 
Alex Konshin ©   (2004-08-20 06:23) [8]

http://home.earthlink.net/~akonshin/index.htm


 
Александр1   (2004-08-20 08:16) [9]

Alex Konshin - Спасибо за интересную информацию.
Но все эти приложения без формы. А мне надо с формой, с кнопками?


 
Alex Konshin ©   (2004-08-20 11:11) [10]

Надо - напиши. Там все для этого есть.


 
Александр1   (2004-08-20 19:31) [11]

Да это понятно. У меня правда мало опыта в этом деле. Ну ни чё попробуем разобраться.
Может у кого ещё будут какие примеры?


 
Александр1   (2004-08-24 18:03) [12]

Удалено модератором
Примечание: Создание пустых сообщений


 
Игорь Шевченко ©   (2004-08-24 18:18) [13]


> У меня правда мало опыта в этом деле.


Тогда у тебя должно быть много денег, чтобы заплатить за готовую программу тому, у кого опыта больше.


 
Vit@ly ©   (2004-08-24 18:23) [14]

Странно, что тебя не удовлетворил Alex Konshin ©
http://www.swissdelphicenter.ch/en/showcode.php?id=57
Попытай счастья здесь
:(


 
Александр1   (2004-08-25 14:12) [15]

Игорь Шевченко Знаешь я пришёл на этот сайт не деньги платить, а опыта набираться. А деньги я и так за интернет плачу!


 
Александр1   (2004-08-25 14:13) [16]

Vit@ly - Большое спасибо!


 
Игорь Шевченко ©   (2004-08-25 17:32) [17]


> Знаешь я пришёл на этот сайт не деньги платить, а опыта
> набираться. А деньги я и так за интернет плачу!


http://ln.com.ua/~openxs/articles/smart-questions-ru.html

Читай.


 
Александр1   (2004-08-27 14:47) [18]


> http://ln.com.ua/~openxs/articles/smart-questions-ru.html
>
> Читай.

Да это понятно. Но иногда чтобы добиться результата к большому сожелению приходится, сам того не ведая, "грешить", отступать от правил. Да к сожалению это так. Но по мере возможного я стараюсь придерживаться правил. Хотя если говорить честно, то у вас здесь пол сайта  (50%) нарушают эти правила. Ну и чё??? Убить что-ли всех..... Или может быть распять на кресте.....



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

Форум: "WinAPI";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.039 c
3-1094105365
Heretic
2004-09-02 10:09
2004.10.03
Операция пересечения в SQL-запросе.


1-1095609995
tyus
2004-09-19 20:06
2004.10.03
ProgressBar


1-1095448396
4МО
2004-09-17 23:13
2004.10.03
TaskBar


1-1095415832
vvv
2004-09-17 14:10
2004.10.03
MainMenu


14-1095355650
lipskiy
2004-09-16 21:27
2004.10.03
Можно ли сделать так, чтобы при заходе в локальный сетевой ресурс





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский