Получаем S/n Материнской Платы И Жесткого Диска

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
1 Мар 2015
1,078
276
155
VK
#1
Серийный номер мп и жд достаем из WMI если данная служка будет отключена мы ничего не получим
Код:
uses
  ActiveX,
  Variants,
  SysUtils,
  ComObj;

type
  AR = array[0..2] of string;

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;

function GetMotherBoardSerial: ar;
var
  objWMIService: OLEVariant;
  colItems: OLEVariant;
  colItem: OLEVariant;
  oEnum: IEnumvariant;
  iValue: LongWord;
  mb, hdd: string;
begin
  result[1] := 'N/A';
  result[2] := 'N/A';
  try
    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[1] := VarToStr(colItem.SerialNumber);
    colItems := objWMIService.ExecQuery('SELECT SerialNumber FROM win32_physicalmedia ', 'WQL', 0);
    oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
    if oEnum.Next(1, colItem, iValue) = 0 then
      Result[2] := VarToStr(colItem.SerialNumber);
  finally
  end;
end;
Использовать так:
Код:
begin
  CoInitialize(nil);
  Writeln('Serial MotherBoard ' + GetMotherBoardSerial[1]);
  Writeln('Serial Hdd ' + GetMotherBoardSerial[2]);
  Readln;
  CoUninitialize;
end.