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