In order to get the hard disk serial number and other manufacturer information (NOT volume serial, only the unique one, the one that will not change after a format, physical one) using our hddphysic product and delphi code you need to do the following 3 easy steps:
(1) Create a new unit called HDDPhysic where you declare the imported hddphysic library functions :
HddPhysic.pas :
interface
function Init (sUser: PAnsiChar; sRegCode: PAnsiChar): Integer; stdcall; external 'HDDPhysic.dll';
function GetPhysicInfo (idiskIndex: Integer; iInfoType: Integer; pHddInfo_OUT: PAnsiChar): Integer; stdcall; external 'HDDPhysic.dll';
implementation
end.
(2) Include the HddPhysic.pas in your project and then Call the Init function to initialize the user computer hard drives and get the total available devices
var
iWinDrive, iDrivesCount, i: Integer;
begin
i:=0;
//init HddPhysic dll
iDrivesCount:=Init('
if iDrivesCount>0 then
begin
//add drives indexes to combo
Repeat
ComboBoxDrives.Items.Add(IntToStr(i));
Inc(i);
Until i = iDrivesCount ;
//get windows hdd drive index
iWinDrive := GetPhysicInfo(0, 6, nil);
WinDrive.Text := IntToStr(iWinDrive);
ComboBoxDrives.ItemIndex := iWinDrive ; //select windows drive index
end;
end;
(3) Now that you have the total hard drives count you can query for the manufacturer information passing the disk index to the GetPhysicInfo function:
var
iDiskNo,iReturn: Integer;
cInfo: AnsiString;
begin
SetLength( cInfo, 512 ); //allocate some space in the buffer
ClearEdit;
iDiskNo:=ComboBoxDrives.ItemIndex; //get selected drive index
iReturn := GetPhysicInfo(iDiskNo,0,PAnsiChar(cInfo)); //0 = hdd serial number
Edit1.Text := cInfo;
iReturn := GetPhysicInfo(iDiskNo, 1, PAnsiChar(cInfo)); //1 = hdd model
Edit2.Text := cInfo;
iReturn := GetPhysicInfo(iDiskNo, 2, PAnsiChar(cInfo)); //2 = hdd revision
Edit3.Text := cInfo;
iReturn := GetPhysicInfo(iDiskNo, 3, PAnsiChar(cInfo)); //3 = hdd type
Edit6.Text := cInfo;
iReturn := GetPhysicInfo(iDiskNo, 4, PAnsiChar(cInfo)); //4 = hdd size
Edit5.Text := cInfo;
iReturn := GetPhysicInfo(iDiskNo, 5, PAnsiChar(cInfo)); //5 = hdd buffer size
Edit4.Text := cInfo;
end;
Notes: No errors checks are done in this example, you should do some error
A complete project with source code example for using HDDPhysic component to get hard disk physical information with Delphi (CodeGear Delphi 2009) is available in the resources area of the product (here).