uses SysUtils, Variants, ActiveX, ComObj;
function GetHardDiskID: String;
const
wbemFlagForwardOnly = $00000020;
var
iValue: LongWord;
oEnum : IEnumvariant;
FWbemObject : OLEVariant;
FWbemObjectSet: OLEVariant;
FWMIService : OLEVariant;
FSWbemLocator : OLEVariant;
begin;
Result := '';
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('LocalHost', 'Root\CIMV2', '', '');
FWbemObjectSet:= FWMIService.ExecQuery(
'Select * From Win32_PhysicalMedia', 'WQL', wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
While oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
if (not VarIsNull(FWbemObject.Properties_.Item('SerialNumber').Value)) then
begin
if (FWbemObject.Properties_.Item('Tag').Value = '\\.\PHYSICALDRIVE0') then
begin
Result := Trim(FWbemObject.Properties_.Item('SerialNumber').Value);
Exit;
end;
end;
FWbemObject := UnAssigned;
end;
end;