NTSet базируется на стандартных WMI запросах. Начинал в свое время пилить модуль... руки не дошли, может пригодится
unit System.WMI;
interface
uses
Winapi.ActiveX, ComObj,
System.Classes, System.SysUtils, System.Variants;
type
// ----------------------------------------------------------------------------
// TWin32_OperationSystem
// ----------------------------------------------------------------------------
TItemOperationSystem = class(TCollectionItem)
private
aName: UnicodeString;
aArchitecture: UnicodeString;
aBuild: UnicodeString;
aServicePack: UnicodeString;
aLanguage: UnicodeString;
aRegUser: UnicodeString;
aRegCompany: UnicodeString;
aBoot: UnicodeString;
aSystemDevice: UnicodeString;
aSystemDrive: UnicodeString;
aSystemDirectory: UnicodeString;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
published
property Name: UnicodeString read aName;
property Architecture: UnicodeString read aArchitecture;
property Build: UnicodeString read aBuild;
property ServicePack: UnicodeString read aServicePack;
property Language: UnicodeString read aLanguage;
property RegUser: UnicodeString read aRegUser;
property RegCompany: UnicodeString read aRegCompany;
property Boot: UnicodeString read aBoot;
property SystemDevice: UnicodeString read aSystemDevice;
property SystemDrive: UnicodeString read aSystemDrive;
property SystemDirectory: UnicodeString read aSystemDirectory;
end;
TWin32_OperationSystem = class(TCollection)
private
function GetItem(Index: Integer): TItemOperationSystem;
procedure SetItem(Index: Integer; const Value: TItemOperationSystem);
public
function Add: TItemOperationSystem;
procedure GetInfo(aHost, aUser, aPswd: UnicodeString);
public
property Items[Index: Integer]: TItemOperationSystem read GetItem write SetItem; default;
end;
// ----------------------------------------------------------------------------
// TWin32_SystemEnclosure
// ----------------------------------------------------------------------------
TItemSystemEnclosure = class(TCollectionItem)
end;
TWin32_SystemEnclosure = class(TCollection)
end;
// ----------------------------------------------------------------------------
// TWin32_Processor
// ----------------------------------------------------------------------------
TItemProcessor = class(TCollectionItem)
private
aName: UnicodeString;
aNumberOfPhysicalCore: UnicodeString;
aNumberOfLogicalCore: UnicodeString;
aL2CacheSize: UnicodeString;
aL3CacheSize: UnicodeString;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
published
property Name: UnicodeString read aName;
property NumberOfPhysicalCore: UnicodeString read aNumberOfPhysicalCore;
property NumberOfLogicalCore: UnicodeString read aNumberOfLogicalCore;
property L2CacheSize: UnicodeString read aL2CacheSize;
property L3CacheSize: UnicodeString read aL3CacheSize;
end;
TWin32_Processor = class(TCollection)
private
function GetItem(Index: Integer): TItemProcessor;
procedure SetItem(Index: Integer; const Value: TItemProcessor);
public
function Add: TItemProcessor;
procedure GetInfo(aHost, aUser, aPswd: UnicodeString);
public
property Items[Index: Integer]: TItemProcessor read GetItem write SetItem; default;
end;
// ----------------------------------------------------------------------------
// TItemMotherboard
// ----------------------------------------------------------------------------
TItemMotherboard = class(TCollectionItem)
private
aName: UnicodeString;
aManufacturer: UnicodeString;
aProduct: UnicodeString;
aVersion: UnicodeString;
aSerialNumber: UnicodeString;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
published
property Name: UnicodeString read aName;
property Manufacturer: UnicodeString read aManufacturer;
property Product: UnicodeString read aProduct;
property Version: UnicodeString read aVersion;
property SerialNumber: UnicodeString read aSerialNumber;
end;
TWin32_Motherboard = class(TCollection)
private
function GetItem(Index: Integer): TItemMotherboard;
procedure SetItem(Index: Integer; const Value: TItemMotherboard);
public
function Add: TItemMotherboard;
procedure GetInfo(aHost, aUser, aPswd: UnicodeString);
public
property Items[Index: Integer]: TItemMotherboard read GetItem write SetItem; default;
end;
// ============================================================================
implementation
// ----------------------------------------------------------------------------
// TWin32_OperationSystem
// ----------------------------------------------------------------------------
constructor TItemOperationSystem.Create(Collection: TCollection);
begin
inherited Create(Collection);
end;
destructor TItemOperationSystem.Destroy;
begin
inherited;
end;
// ----------------------------------------------------------------------------
function TWin32_OperationSystem.Add: TItemOperationSystem;
begin
Result := TItemOperationSystem(inherited Add);
end;
function TWin32_OperationSystem.GetItem(Index: Integer): TItemOperationSystem;
begin
Result := TItemOperationSystem(inherited Items );
end;
procedure TWin32_OperationSystem.SetItem(Index: Integer;
const Value: TItemOperationSystem);
begin
if (Index > -1) and (Index <= Self.Count)
then Items .Assign(Value);
end;
procedure TWin32_OperationSystem.GetInfo(aHost, aUser, aPswd: UnicodeString);
var
aItem: TItemOperationSystem;
aSWbemLocator: OleVariant;
aWbemServices: OleVariant;
aWbemQuery: OleVariant;
aWbemObject: OleVariant;
aEnum: IEnumVARIANT;
aValue: LongWord;
begin
aSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
aWbemServices := aSWbemLocator.ConnectServer(aHost, 'root\CIMV2', aUser, aPswd);
aWbemQuery := aWbemServices.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL', $00000020);
aEnum := IUnknown(aWbemQuery._NewEnum) as IEnumVariant;
while aEnum.Next(1, aWbemObject, aValue) = 0 do
begin
aItem := TItemOperationSystem.Create(Self);
aItem.aName := VarToStr(aWbemObject.Caption);
aItem.aArchitecture := VarToStr(aWbemObject.OSArchitecture);
aItem.aBuild := VarToStr(aWbemObject.Version);
end;
aWbemObject := Unassigned;
end;
// ----------------------------------------------------------------------------
// TWin32_Processor
// ----------------------------------------------------------------------------
constructor TItemProcessor.Create(Collection: TCollection);
begin
inherited Create(Collection);
end;
destructor TItemProcessor.Destroy;
begin
inherited;
end;
// ----------------------------------------------------------------------------
function TWin32_Processor.Add: TItemProcessor;
begin
Result := TItemProcessor(inherited Add);
end;
function TWin32_Processor.GetItem(Index: Integer): TItemProcessor;
begin
Result := TItemProcessor(inherited Items );
end;
procedure TWin32_Processor.SetItem(Index: Integer; const Value: TItemProcessor);
begin
if (Index > -1) and (Index <= Self.Count)
then Items .Assign(Value);
end;
procedure TWin32_Processor.GetInfo(aHost, aUser, aPswd: UnicodeString);
var
aItem: TItemProcessor;
aSWbemLocator: OleVariant;
aWbemServices: OleVariant;
aWbemQuery: OleVariant;
aWbemObject: OleVariant;
aEnum: IEnumVARIANT;
aValue: LongWord;
begin
aSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
aWbemServices := aSWbemLocator.ConnectServer(aHost, 'root\CIMV2', aUser, aPswd);
aWbemQuery := aWbemServices.ExecQuery('SELECT * FROM Win32_Processor','WQL', $00000020);
aEnum := IUnknown(aWbemQuery._NewEnum) as IEnumVariant;
while aEnum.Next(1, aWbemObject, aValue) = 0 do
begin
aItem := TItemProcessor.Create(Self);
aItem.aName := VarToStr(aWbemObject.Name);
aItem.aNumberOfPhysicalCore := VarToStr(aWbemObject.NumberOfCores);
aItem.aNumberOfLogicalCore := VarToStr(aWbemObject.NumberOfLogicalProcessors);
aItem.aL2CacheSize := VarToStr(aWbemObject.L2CacheSize);
aItem.aL3CacheSize := VarToStr(aWbemObject.L3CacheSize);
end;
aWbemObject := Unassigned;
end;
// ----------------------------------------------------------------------------
// TWin32_Motherboard
// ----------------------------------------------------------------------------
constructor TItemMotherboard.Create(Collection: TCollection);
begin
inherited Create(Collection);
end;
destructor TItemMotherboard.Destroy;
begin
inherited;
end;
// ----------------------------------------------------------------------------
function TWin32_Motherboard.Add: TItemMotherboard;
begin
Result := TItemMotherboard(inherited Add);
end;
function TWin32_Motherboard.GetItem(Index: Integer): TItemMotherboard;
begin
Result := TItemMotherboard(inherited Items );
end;
procedure TWin32_Motherboard.SetItem(Index: Integer;
const Value: TItemMotherboard);
begin
if (Index > -1) and (Index <= Self.Count)
then Items .Assign(Value);
end;
procedure TWin32_Motherboard.GetInfo(aHost, aUser, aPswd: UnicodeString);
var
aItem: TItemMotherboard;
aSWbemLocator: OleVariant;
aWbemServices: OleVariant;
aWbemQuery: OleVariant;
aWbemObject: OleVariant;
aEnum: IEnumVARIANT;
aValue: LongWord;
begin
aSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
aWbemServices := aSWbemLocator.ConnectServer(aHost, 'root\CIMV2', aUser, aPswd);
aWbemQuery := aWbemServices.ExecQuery('SELECT * FROM Win32_BaseBoard','WQL', $00000020);
aEnum := IUnknown(aWbemQuery._NewEnum) as IEnumVariant;
while aEnum.Next(1, aWbemObject, aValue) = 0 do
begin
aItem := TItemMotherboard.Create(Self);
aItem.aName := VarToStr(aWbemObject.Caption);
aItem.aManufacturer := VarToStr(aWbemObject.Manufacturer);
aItem.aProduct := VarToStr(aWbemObject.Product);
aItem.aVersion := VarToStr(aWbemObject.Version);
aItem.aSerialNumber := VarToStr(aWbemObject.SerialNumber);
end;
aWbemObject := Unassigned;
end;
// ============================================================================
end.
Пример использования:
procedure TFormDevices.FormShow(Sender: TObject); var aWin32_Info: TWin32_Motherboard; i: Cardinal; begin Self.Caption := 'Диспетчер устройств';
aWin32_Info := TWin32_Motherboard.Create(TItemMotherboard);
aWin32_Info.GetInfo(EmptyStr, EmptyStr, EmptyStr);
for i := 0 to aWin32_Info.Count - 1 do
ShowMessage(
aWin32_Info[i].Manufacturer + chr(13) +
aWin32_Info[i].Product + chr(13) +
aWin32_Info[i].Version + chr(13) +
aWin32_Info[i].SerialNumber);
end;
По сути это база, допилить можно что угодно. Ну и ссылка на первоисточник
https://msdn.microsoft.com/en-us/library/aa394388(v=vs.85).aspx