Bonjour

Objectif : parser le résultat d'une requête WMI comme celle-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT * FROM WIN32_DISKDRIVE WHERE deviceID="\\\\.\\PHYSICALDRIVE0"
Bien que ceci fonctionne , cela ne me plait pas car le résultat ne sera pas libéré . Ce n'est pas le "parsing" qui me chagrine mais bien la manière de passer le résultat , il y a là quelque chose qui m'échappe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
function WMICollection(Chaine : String): THashedStringList;
var d,f : word;
    start : Boolean;
    Ws : String;
begin
    Chaine:=AnsiReplaceStr(Chaine,';','');
    Chaine:=AnsiReplaceStr(Chaine,' = ','=');
    Chaine:=AnsiReplaceStr(Chaine,#9,'');
    Result:=THashedStringList.Create;
    Ws:='';
    for f := Length(Chaine) downto 0 do
      if chaine[f]='}' then break;
    Start:=False;
    for d:= 0 to f-1 do
      begin
       if Start then ws:=ws+Chaine[d]
                else Start:=Chaine[d]='{';
      end;
    Result.Text:=ws;
end;
 
// pour faire par exemple ceci
function WMIPropriete(TS : THashedStringList; Name : String) : String;
begin
 Result:=TS.ValueFromIndex[TS.IndexOfName(Name)];
end;
j'ai bien fait une tentative de
function WMICollection(Chaine : String;const THS :TStringList): Integer;
mais avec une erreur de compilation à la clé

je doit avouer que un résultat TString,TStringlist etc... est une première pour moi , d'où cet appel