Здравствуйте, alive
продолжаю разбараться..
получается но не все..
подскажите а как разобраться с Win32_NetworkAdapterConfiguration делаю анологично примеру...
получаю
8 сеетвых адаптеров ! и все это в куче... т.е примерно 8*60=480 свойств.. а мне нужно всего 2*8, ито если активны...
реально всего 2 (иногда 4 это когда 2 сетевых карты) MACAddress и IPAddress...
причем MAC получается без проблем... а вот IP непонятно.. теоритически это массив при отладке пишет что array of Varian... но
VarArrayHighBound(SProp.Get_Value, 1) возвращает 0....
использую следующий код (взял из примера только заменил на Win32_NetworkAdapterConfiguration):
procedure TForm1.Button1Click(Sender: TObject);
var
Service: ISWbemServices;
ObjectSet: ISWbemObjectSet;
SObject: ISWbemObject;
PropSet: ISWbemPropertySet;
SProp: ISWbemProperty;
PropEnum, Enum: IEnumVariant;
TempObj: OleVariant;
Value: Cardinal;
Column: TListColumn;
begin
Memo1.Lines.Clear;
Service := SWbemLocator1.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0, nil);
SObject := Service.Get('Win32_NetworkAdapterConfiguration', wbemFlagUseAmendedQualifiers, nil);
ObjectSet := SObject.Instances_(0, nil);
Enum := (ObjectSet._NewEnum) as IEnumVariant;
while (Enum.Next(1, TempObj, Value) = S_OK) do
begin
SObject := IUnknown(TempObj) as SWBemObject;
PropSet := SObject.Properties_;
PropEnum := (PropSet._NewEnum) as IEnumVariant;
while (PropEnum.Next(1, TempObj, Value) = S_OK) do
begin
SProp := IUnknown(TempObj) as SWBemProperty;
Memo1.Lines.Add('***'+SProp.Name);
ShowProp(SProp);
end;
end; { while }
end;
procedure TForm1.ShowProp(SProp: ISWbemProperty);
var
StrValue: string;
Count: Cardinal;
begin
StrValue := '';
Memo1.Lines.Add('SProp.CIMType'+IntToStr(SProp.CIMType));
if VarIsNull(SProp.Get_Value) then
StrValue := '!!Пусто!!'
else
case SProp.CIMType of
//******************************************************************//
wbemCimtypeUint8, wbemCimtypeSint8, wbemCimtypeUint16, wbemCimtypeSint16,
wbemCimtypeUint32, wbemCimtypeSint32, wbemCimtypeSint64:
if VarIsArray(SProp.Get_Value) then
begin
if VarArrayHighBound(SProp.Get_Value, 1) <> 0 then
for Count := 1 to VarArrayHighBound(SProp.Get_Value, 1) do
StrValue := StrValue + ' ' + IntToStr(SProp.Get_Value[Count]);
end
else
StrValue := IntToStr(SProp.Get_Value);
//******************************************************************//
wbemCimtypeReal32, wbemCimtypeReal64:
StrValue := FloatToStr(SProp.Get_Value);
//******************************************************************//
wbemCimtypeString:
if VarIsArray(SProp.Get_Value) then
begin
if VarArrayHighBound(SProp.Get_Value, 1) <> 0 then
for Count := 1 to VarArrayHighBound(SProp.Get_Value, 1) do
StrValue := StrValue + ' ' + SProp.Get_Value[Count];
end
else
StrValue := SProp.Get_Value;
//…
//******************************************************************//
else begin
StrValue:='-неизвестный тип';
end;
end; {case}
Memo1.Lines.Add(StrValue);
end;
при отладке попадаем
wbemCimtypeString:
if VarIsArray(SProp.Get_Value) then
begin
if VarArrayHighBound(SProp.Get_Value, 1) <> 0 then //здесь False и все...