procedure GetWMIInfo(mem: TMemo);
// uses Winapi.ActiveX, System.Win.ComObj;
const
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator: OLEVariant;
FWMIService: OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject: OLEVariant;
oEnum: IEnumvariant;
iValue: LongWord;
begin
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
FWbemObjectSet := FWMIService.ExecQuery('Select * from Win32_MotherboardDevice', 'WQL', wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant;
while oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
if not VarIsNull(FWbemObject.DeviceID) then
mem.Lines.Add(VarToStr(FWbemObject.DeviceID));
if not VarIsNull(FWbemObject.PrimaryBusType) then
mem.Lines.Add(VarToStr(FWbemObject.PrimaryBusType));
if not VarIsNull(FWbemObject.SecondaryBusType) then
mem.Lines.Add(VarToStr(FWbemObject.SecondaryBusType));
FWbemObject := Unassigned;
end;
end;
что вы там собрались брать?
Результат:
я могу вам предложить вот такой вариант
замените этими строками код выше, вы получите все устройства доступные на ПК
FWbemObjectSet := FWMIService.ExecQuery('Select * from CIM_LogicalDevice', 'WQL', wbemFlagForwardOnly);
.........
if not(VarIsNull(FWbemObject.Name) and VarIsNull(FWbemObject.DeviceID)) then
mem.Lines.Add(VarToStr(FWbemObject.Name) + ' - ' + VarToStr(FWbemObject.DeviceID));
или использовать защиту по MAC адресу
FWbemObjectSet := FWMIService.ExecQuery
('SELECT Description,MACAddress,IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE', 'WQL',
wbemFlagForwardOnly);
..............
if not(VarIsNull(FWbemObject.MacAddress) and VarIsNull(FWbemObject.IpAddress)) then
mem.Lines.Add(VarToStr(FWbemObject.MacAddress) + ' - ' + VarToStr(FWbemObject.IpAddress[0]));