Показать сообщение отдельно

  #6  
Старый 15.09.2009, 13:34
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

Вот тут навоял небольшую функцию для получения серийника первого винта юзая WMI
Код слегка через жопный, но работает.


Код:
uses ComObj, ActiveX;

function CoInitialize(pvReserved: Pointer): HResult; stdcall;  external 'ole32.dll' name 'CoInitialize';

function GetHDDSerialNum():string;
var
  locator:variant;
  service:variant;
  properties:variant;
  p:IUnknown;
  p1:Olevariant;
  Enum:IEnumVariant;
  Value: Cardinal;
begin
  CoInitialize(nil);
  locator := CreateOleObject('WbemScripting.SWbemLocator');
  service := locator.ConnectServer('.');
  properties := service.ExecQuery('SELECT * FROM Win32_PhysicalMedia');

  p := properties._NewEnum;
  p.QueryInterface(IEnumVariant, Enum);
  Enum.Next(1, p1, Value);
  result := p1.SerialNumber;
  locator := Unassigned;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(GetHDDSerialNum());
end;
 
Ответить с цитированием