![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день ув. Программисты.
Имеется код: Код:
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, а дальше никак. Перебор значений есть. но по чему то добавляет только одну( В чем причина? |