1

我编写了一个函数,该函数使用 WMI 获取计算机上已安装软件的列表

begin
  Result:='';
  FWbemObjectSet:= FWMIService.ExecQuery(Format('Select %s from %s',[WMIProperty, WMIClass]),'WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;

  while oEnum.Next(1, FWbemObject, iValue) = 0 do
    begin
      if not VarIsNull(FWbemObject.Properties_.Item(WMIProperty).Value) then
      Result:=FWbemObject.Properties_.Item(WMIProperty).Value;
      ClientForm.TreeView1.Items.AddChild(Node, Format('%s',[String(FWbemObject.Name)]));
      FWbemObject:=Unassigned;
    end;

end;

该函数通过以下代码在 FormCreate 处执行:

GETWMIstringSW('Win32_Product','Name');

我的问题是,如何更改 ImageIndex 和 StateIndex?我想在函数中添加另一行代码来获取版本,就像这样

(Format('Version %s',[String(FWbemObject.Version)]));

但是我被卡住了,你们能指出我正确的方向吗?太感谢了。

4

1 回答 1

2

AddChild函数将一个实例返回到新节点,因此您需要保存该节点,然后修改属性。

Var
  LNode : TTreeNode;
begin
   ..
   LNode := ClientForm.TreeView1.Items.AddChild(Node, Format('%s',[String(FWbemObject.Name)]));
   LNode.StateIndex:=0;
   LNode.ImageIndex:=0;
   ..
   ..
end;
于 2013-04-25T00:11:03.437 回答