Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.01.2014, 13:56
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию WMI перебор значений

Добрый день ув. Программисты.

Имеется код:

Код:
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, а дальше никак.

Перебор значений есть. но по чему то добавляет только одну(

В чем причина?
Ответить с цитированием
  #2  
Старый 11.01.2014, 15:25
cezer cezer вне форума
Прохожий
 
Регистрация: 01.06.2012
Сообщения: 44
Репутация: 10
По умолчанию

Сам спросил.Сам отвечаю:

Код:
procedure  GetWMI;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer('.', 'root\CIMV2', '', '');
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_Share','WQL',$00000020);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Form1.memo2.lines.add(Format('Caption        %s',[String(FWbemObject.Caption)]));// String
    Form1.memo2.lines.add(Format('Description    %s',[String(FWbemObject.Description)]));// String
    Form1.memo2.lines.add(Format('Name           %s',[String(FWbemObject.Name)]));// String
    Form1.memo2.lines.add(Format('Path           %s',[String(FWbemObject.Path)]));// String

    Form1.memo2.lines.add('***');
    FWbemObject:=Unassigned;
  end;
end;


procedure TForm1.Button9Click(Sender: TObject);
begin
 try
    CoInitialize(nil);
    try
      GetWMI;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Form1.memo1.lines.add(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Form1.memo1.lines.add(E.Classname, ':', E.Message);
 end;

 end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:50.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter