Easily Access System BIOS Information From Windows With Delphi
Have you ever tried to secure your application with registration keys? If so, you have gone through different methods to do that, for instance, generating a registration key based on the serial number of the device or something like that.
Or have you tried to get all the information about the device for analytics? If so, this TSMBIOS library helps you to fetch all the data related to the device using your favorite Delphi programming language which is awesome! TSMBIOS is an open source library for Delphi over on GitHub.
Here is some official information about the TSMBIOS library!
The SMBIOS (System Management BIOS) is a standard developed by the DMTF. The information stored in the SMBIOS includes device manufacturer, model name, serial number, BIOS version, asset tag, processors, ports, and device memory installed.
The TSMBIOS library allows access to the System Management BIOS (SMBIOS) using the Object Pascal language.

Features
Some features of this project are
- Source Full documented compatible with the help insight feature, available since Delphi 2005.
- Supports SMBIOS Version from 2.1 to 2.8
- Supports Windows, Linux.
- SMBIOS Data can be saved and/or load to a file.
- SMBIOS Data can be obtained from remote machines (via WMI).
{$APPTYPE CONSOLE}
{$R *.res}
uses
Classes,
SysUtils,
uSMBIOS in '....CommonuSMBIOS.pas';
procedure GetMemoryDeviceInfo;
Var
SMBios : TSMBios;
LMemoryDevice : TMemoryDeviceInformation;
begin
SMBios:=TSMBios.Create;
try
WriteLn('Memory Device Information');
WriteLn('-------------------------');
if SMBios.HasPhysicalMemoryArrayInfo then
for LMemoryDevice in SMBios.MemoryDeviceInformation do
begin
WriteLn(Format('Total Width %d bits',[LMemoryDevice.RAWMemoryDeviceInfo.TotalWidth]));
WriteLn(Format('Data Width %d bits',[LMemoryDevice.RAWMemoryDeviceInfo.DataWidth]));
WriteLn(Format('Size %d Mbytes',[LMemoryDevice.GetSize]));
WriteLn(Format('Form Factor %s',[LMemoryDevice.GetFormFactor]));
WriteLn(Format('Device Locator %s',[LMemoryDevice.GetDeviceLocatorStr]));
WriteLn(Format('Bank Locator %s',[LMemoryDevice.GetBankLocatorStr]));
WriteLn(Format('Memory Type %s',[LMemoryDevice.GetMemoryTypeStr]));
WriteLn(Format('Speed %d MHz',[LMemoryDevice.RAWMemoryDeviceInfo.Speed]));
WriteLn(Format('Manufacturer %s',[LMemoryDevice.ManufacturerStr]));
WriteLn(Format('Serial Number %s',[LMemoryDevice.SerialNumberStr]));
WriteLn(Format('Asset Tag %s',[LMemoryDevice.AssetTagStr]));
WriteLn(Format('Part Number %s',[LMemoryDevice.PartNumberStr]));
WriteLn;
if LMemoryDevice.RAWMemoryDeviceInfo.PhysicalMemoryArrayHandle>0 then
begin
WriteLn(' Physical Memory Array');
WriteLn(' ---------------------');
WriteLn(' Location '+LMemoryDevice.PhysicalMemoryArray.GetLocationStr);
WriteLn(' Use '+LMemoryDevice.PhysicalMemoryArray.GetUseStr);
WriteLn(' Error Correction '+LMemoryDevice.PhysicalMemoryArray.GetErrorCorrectionStr);
if LMemoryDevice.PhysicalMemoryArray.RAWPhysicalMemoryArrayInformation.MaximumCapacity<>$80000000 then
WriteLn(Format(' Maximum Capacity %d Kb',[LMemoryDevice.PhysicalMemoryArray.RAWPhysicalMemoryArrayInformation.MaximumCapacity]))
else
WriteLn(Format(' Maximum Capacity %d bytes',[LMemoryDevice.PhysicalMemoryArray.RAWPhysicalMemoryArrayInformation.ExtendedMaximumCapacity]));
WriteLn(Format(' Memory devices %d',[LMemoryDevice.PhysicalMemoryArray.RAWPhysicalMemoryArrayInformation.NumberofMemoryDevices]));
end;
WriteLn;
end
else
Writeln('No Memory Device Info was found');
finally
SMBios.Free;
end;
end;
begin
try
GetMemoryDeviceInfo;
except
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.
Leave Your Comment