Форум: "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.048 c