Добрый день ув. Программисты.
Имеется код:
Код:
procedure GetWMI(wmi,par:string);
var
locator : ISWbemLocator;
objectSet : ISWbemObjectSet;
obj : ISWbemObject;
sl,pl : TStringList;
i,j:integer;
wmiClass, selectList : string;
propName : string;
propValue : string;
varProp : oleVariant;
intVal : cardinal;
varEnum : IEnumVariant;
varObj : oleVariant;
fetched : cardinal;
begin
locator := CoSWbemLocator.Create();
form1.services := locator.ConnectServer('.','root\cimv2','','','','',0,nil);
locator := nil;
sl := TStringList.Create;
pl := TStringList.Create;
sl.Values[wmi] := par;
for i:=0 to sl.Count - 1 do begin
wmiClass := sl.Names[i];
selectList := sl.ValueFromIndex[i];
pl.CommaText := selectList;
objectSet :=Form1.services.ExecQuery('select '+ selectList + ' from ' + wmiClass,'WQL',
wbemFlagReturnImmediately and wbemFlagForwardOnly,nil);
varEnum := objectSet._NewEnum as IEnumVariant;
varEnum.Next(1,varObj,fetched);
obj := IUnknown(varObj) as ISWbemObject;
for j := 0 to pl.count -1 do begin
propName := pl[j];
varProp := obj.Properties_.Item(propName,0);
if not varIsNull(varProp) then
propValue := varToStr(varProp)
else propValue := '';
form1.memo1.Lines.Add(propName+' | '+propValue);
end;
end;
form1.memo1.Lines.Add('===========================');
sl.Free;
pl.Free;
end;
Значения передаю так:
Код:
procedure TForm1.Button9Click(Sender: TObject);
begin
GetWMI('Win32_Share','Caption, Name, Path');
end;
Проблема в том что он выводит не все расшаренные папки. Если смотреть через консоль WMI то там их более 5и.
В консоле WMI, первая папка это:
Caption | Удаленный Admin
Name | ADMIN$
Path | C:\Windows
Эту первую папку он мне выводит в memo, а дальше никак.
Перебор значений есть. но по чему то добавляет только одну(
В чем причина?