
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).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
{$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. |
Head over and check out the TSMBIOS library!
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition