我编写了一个函数,它使用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?我想在函数中添加另一行代码来获取Version,就像这样
(Format('Version %s',[String(FWbemObject.Version)]));
但是我被困住了,你能指点我正确的方向吗?非常感谢你。
答案 0 :(得分:2)
AddChild函数将实例返回给新节点,因此您需要保存节点,然后修改属性。
Var
LNode : TTreeNode;
begin
..
LNode := ClientForm.TreeView1.Items.AddChild(Node, Format('%s',[String(FWbemObject.Name)]));
LNode.StateIndex:=0;
LNode.ImageIndex:=0;
..
..
end;