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 に答える