How do I get the motherboard ID or serial number from Delphi code?
Is there any example code or articles that I can look at?
try using the WMI Win32_BaseBoard Class .
see theses samples:
Option 1) before execute you need import the Microsoft WMIScripting Library
from Component
->Import Component
and then select Import type library
program GetWMI_MotherBoardInfo;
{$APPTYPE CONSOLE}
uses
ActiveX,
Variants,
SysUtils,
WbemScripting_TLB in '..\..\..\Documents\RAD Studio\5.0\Imports\WbemScripting_TLB.pas';//
Function GetMotherBoardSerial:string;
var
WMIServices : ISWbemServices;
Root : ISWbemObjectSet;
Item : Variant;
begin
WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil);
Root := WMIServices.ExecQuery('Select SerialNumber From Win32_BaseBoard','WQL', 0, nil);
Item := Root.ItemIndex(0);
Result:=VarToStr(Item.SerialNumber);
end;
begin
try
CoInitialize(nil);
Writeln('Serial MotherBoard '+GetMotherBoardSerial);
Readln;
CoUninitialize;
except
on E:Exception do
Begin
CoUninitialize;
Writeln(E.Classname, ': ', E.Message);
Readln;
End;
end;
end.
Option 2) using OLEVariant
, IBindCtx Interface and IMoniker Interface
program GetWMI_MotherBoardSerial;
{$APPTYPE CONSOLE}
uses
SysUtils
,ActiveX
,ComObj
,Variants;
function GetMotherBoardSerial:String;
var
objWMIService : OLEVariant;
colItems : OLEVariant;
colItem : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
function GetWMIObject(const objectName: String): IDispatch;
var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;
begin
Result:='';
objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
colItems := objWMIService.ExecQuery('SELECT SerialNumber FROM Win32_BaseBoard','WQL',0);
oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
if oEnum.Next(1, colItem, iValue) = 0 then
Result:=VarToStr(colItem.SerialNumber);
end;
begin
try
CoInitialize(nil);
try
Writeln('Serial MotherBoard '+GetMotherBoardSerial);
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
Begin
Writeln(E.Classname, ': ', E.Message);
Readln;
End;
end;
end.
If you want show the MainBoard Serial, use this stuff.
To show the Mainboard Number in Windows 10 query the following in the WMI Service:wmic baseboard get product,Manufacturer,version,serialnumber
//USES: Winapi.ActiveX, System.Win.ComObj
function TForm2.GetMotherBoardSerial: string;
var
objWMIService: OLEVariant;
colItems: OLEVariant;
colItem: OLEVariant;
oEnum: IEnumvariant;
iValue: Longword;
function GetWMIObject(const objectName: string): IDispatch;
var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName),
chEaten, Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;
begin
Result := '';
objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
colItems :=
objWMIService.ExecQuery('SELECT SerialNumber FROM Win32_BaseBoard', 'WQL', 0);
oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
if oEnum.Next(1, colItem,
iValue) = 0 then
Result := VarToStr(colItem.SerialNumber);
end;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With