Отправляет email-рассылки с помощью сервиса Sendsay

[TC] получить серийный номер винчестера

Здравствуйте, уважаемые!

Хочу написать программку, определяющую так называемый серийный номер
системного диска. Нашел в интернет несколько примеров исходников, но к
сожалению, не разобрался в многочисленных функциях и вариантах. Можно ли
попроще выполнить эту задачу средствами pascal или delphi.

С уважением,
Грызунов Александр. Самара.

Ответить   "eastreb" Sun, 18 Jan 2009 23:29:25 +0300 (#811765)

 

Ответы:

Приветствую всех.

Грызунов Александр пишет:

Тут проще воспользоваться функциями WinAPI: при помощи GetEnvironmentVariable
получить значение переменной окружения SystemDrive. Это будет буква системного
диска. Затем функцией GetVolumeInformation получить информацию о диске (в т.ч.
серийный номер).
На FreePascal это выглядит так (перевод сделан с предпочитаемого языка на pascal
чисто интуитивно, но все равно работает; все необходимые проверки на ошибки в
этом примере отсутствуют):

program VolumeSerial
uses windows;

const
varname : pChar = 'SystemDrive';
format: pChar = '%x';

var
drive, buffer: pChar;
serial :DWORD;

begin
GetMem (drive, MaxPathLen);
GetMem (buffer, 128);

GetEnvironmentVariable(varname,drive,MaxPathLen);
writeln ('System drive: ' , drive);
if GetVolumeInformation(drive,nil,0,@serial,nil,nil,nil,0) then
begin
{сделано исключительно для того,}
{чтобы показать номер в hex-формате}
wvsprintf(buffer,format,@ serial);
writeln ('Serial: ' , buffer);
end;
end.

Это должно быть откомпилировано как консольное приложение. Результат вывода можете
сравнить с выводом команды dir на соответствующем диске.

Успехов. Анатолий.

Ответить   "i_chay" Tue, 20 Jan 2009 00:57:27 +0400 (#812227)

 

Приветствую всех.

Уточню, что приводимый ранее пример касается логических дисков (томов).

Успехов. Анатолий.

Ответить   "i_chay" Tue, 20 Jan 2009 08:56:47 +0400 (#812315)

 

Здравствуйте, уважаемые!

Руководствуясь материалом, который взял на страничке, где есть примеры для
delphi и C++
http://z.alko-net.ru/?p=347

написал по образцу простенькую програмку, которая выводит на дисплей
серийный номер
желаемого диска. Но вот незадача- сохранять в файл она не хочет- вместо цифр
в файле символы и буквы.
Понимаю, что дело в типе данных, но что с этим делать пока не разобрался.
Подскажите, что нужно исправить. После подписи привожу исходник консольной
версии программы.

С уважением,
Грызунов Александр. Самара.

{$APPTYPE CONSOLE}

uses
SysUtils,windows;
const count=10;
mydisk='C:\';
var
result:integer;
myfile:integer;
SerialNum:DWORD;
a,b:DWORD;
Buffer:Array[0..255]of char; // buffer
begin
GetVolumeInformation(mydisk,Buffer,
sizeof(Buffer),
SerialNum, a,b, nil, 0);
myfile:=FileCreate('serial.txt');
FileWrite(myfile,SerialNum,count);
FileClose(myfile);
//mojno vivesti na display
writeln('SerialNumberDisk',SerialNum);
readln;
end.

Ответить   "eastreb" Wed, 21 Jan 2009 06:50:06 +0300 (#812690)