
15.09.2009, 13:34
|
|
Познавший АНТИЧАТ
Регистрация: 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;
|
|
|