Главная страница
    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.041 c
14-1089277075
nik7777
2004-07-08 12:57
2004.10.03
Подключился кто-то к моей "тачке"


14-1095151477
Dmitriy O.
2004-09-14 12:44
2004.10.03
Лысина - это полянка, вытоптанная мыслями.


1-1095393638
Артем К.
2004-09-17 08:00
2004.10.03
Здравствуйте, уважаемые мастера. Как изменить шрифт Hinta?


14-1094873056
Aplay
2004-09-11 07:24
2004.10.03
Коллекция старых программ


14-1093916546
Александр1
2004-08-31 05:42
2004.10.03
Меню windows





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский