IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

[WMI] Convertion Array of String -> String


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut [WMI] Convertion Array of String -> String
    Bonjour à tous,

    J'utilise cette fonction WMI qui me retourne un tableau de variant :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    function GetWMIExecQuery(wmiServices : ISWbemServices; wmiHost, wmiClass, wmiProperty : string):variant;
    var
      varArray : variant;
      SObject :  ISWbemObject;
      ObjSet :   ISWbemObjectSet;
      SProp :    ISWbemProperty;
      Enum :     IEnumVariant;
      Value :    Cardinal;
      TempObj :  OleVariant;
      i : integer;
      wmiTmpProperty : string;
      numProperties : integer;
      HighBound : integer;
    begin
      i := 1;
      HighBound := 0;
      numProperties := 0;
      i := 1;
      varArray := VarArrayCreate([0, NbOfWord(wmiProperty), 0, 0], varVariant);
      while i <= Length(wmiProperty) do
      begin
        while (wmiProperty[i] <> ';') and (i <= Length(wmiProperty)) do
        begin
          wmiTmpProperty := wmiTmpProperty + wmiProperty[i];
          inc(i);
        end;
        try
          ObjSet := wmiServices.ExecQuery('SELECT * FROM ' + wmiClass, 'WQL',
            wbemFlagReturnImmediately and wbemFlagForwardOnly, nil);
          Enum :=  (ObjSet._NewEnum) as IEnumVariant;
          while (Enum.Next(1, TempObj, Value) = S_OK) do
          begin
            SObject := IUnknown(tempObj) as ISWBemObject;
            SProp := SObject.Properties_.Item(wmiTmpProperty, 0);
            if numProperties = 0 then
              VarArrayRedim(varArray, VarArrayHighBound(varArray, 2) + 1);
            if not VarIsNull(SProp.Get_Value) then
            begin
              varArray[numProperties, HighBound] := Trim(SProp.Get_Value);
            end else
              varArray[numProperties, HighBound] := '';
            inc(HighBound);
          end;
        except
          on e: Exception do
          begin
            ShowMessage(e.Message);
            Exit;
          end;
        end;
        inc(numProperties);
        inc(i);
        wmiTmpProperty := '';
        HighBound := 0;
      end;
      result := varArray;
      VarArrayRedim(varArray, 0);
    end;
    Je passe en paramètre dans wmiProperty les données suivantes "DHCPEnabled;DHCPServer;DNSDomain;IPAddress"

    Ma fonction marche nickel mais elle bloque sur IPAddress car c'est un tableau de string et mon tableau s'attend à recevoir un string...
    Connaissez-vous une fonction qui permet de le convertir ?

  2. #2
    Inactif
    Inscrit en
    Avril 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 55
    Points : 53
    Points
    53
    Par défaut Array de strings
    Physiquement une array de string c'est une array d'adresse pointant chacune sur un string
    donc mis a part la concaténation qui est la fusion des zones je ne vois pas d'autres solutions
    PapyJohn

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    Merci pour ta réponse PapyJohn.

    En fait j'ai essayé de visualiser ce qu'il y avait dans mon tableau. Il s'agit en fait d'un tableau de variant.
    Si je fais mavaleur[0] i lme retourne mon adresse IP...

    Il faudrait trouver un moyen de détecter le tableau de variant.
    Quelque chose du style TVarData(Value).VType := VarArrayOfVariant

    Mais VarArrayOfVariant n'existe pas.

    J'ai aussi remarqué la propriété suivante : WmiProperty.CIMType
    N'est ce pas dans cette direction que je dois aller ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    J'ai trouvé ceci mais mon IPAddress apparait vide. Pourtant je passe bien dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            wbemCimtypeString:
              if VarIsArray(Value) then begin
                if VarArrayHighBound(Value, 1) > 0 then
                  try
                  for Count := 1 to VarArrayHighBound(Value, 1) do
                    sValue := sValue + ' ' + Value[Count];
                  except
                   on E: EConvertError do
                     ShowMessage(E.Message);
                  end;
              end
              else
                sValue := Value;
    mais la 2ème condition vaut False...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    j'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
              if VarIsArray(Value) then begin
                showmessage(Value[0]);
                if VarArrayHighBound(Value, 1) > 0 then
    et il me retourne bien l'adresse IP... je comprends plus rien...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    Maintenant j'ai essayé ceci :
    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
              if VarIsArray(Value) then
              begin
                VarArrayRedim(Value, VarArrayHighBound(Value, 1) + 1);
                Value[1] := Value[0];
                Value[0] := 'Test';
                showmessage(inttostr(VarArrayHighBound(Value, 1)));
                if VarArrayHighBound(Value, 1) > 0 then
                  try
                  for Count := 1 to VarArrayHighBound(Value, 1) do
                    sValue := sValue + ' ' + Value[Count];
                  except
                   on E: EConvertError do
                     ShowMessage(E.Message);
                  end;
              end
              else
                sValue := Value;
    il m'affiche bien ce qu'il y a dans la 2ème case du tableau mais il ne m'affiche pas le 'Test'.
    Si je demande à voir la taille de VarArrayHighBound(Value, 1) il me met 1 alors qu'il y a 2 éléments dans le tableau

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    A mon avis ce qui cloche c ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VarArrayHighBound(Value, 1)
    Si j'ai bien compris le system VarArrayHighBound(Value,1) te renvois le nombre de dimension de Value[1] ce qui dans ton cas te renvoie 1 (Value[1,0] etant le seul variant present dans cette dimension)

    En regardant l'aide il me semble que VarArrayDimCount serait plus adapté a ce que tu cherches a faire
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    en fait j'ai trouvé une solution
    Si je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                if VarArrayHighBound(Value, 1) >= 0 then
                  try
                  for Count := 0 to VarArrayHighBound(Value, 1) do
    Ca fonctionne bien...
    Quand je demande de me retourner la taille de mon tableau il me met 0 alors que j'ai une valeur dedans...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/04/2015, 15h56
  2. Convert Object to List of String
    Par UNIX107 dans le forum Langage
    Réponses: 2
    Dernier message: 15/04/2010, 13h35
  3. Convertion System String en string normal
    Par JeReMsS69 dans le forum C++/CLI
    Réponses: 1
    Dernier message: 14/11/2008, 12h11
  4. Convertion Date and Time en String en WinCC flex 2007
    Par ren973 dans le forum Automation
    Réponses: 4
    Dernier message: 16/10/2008, 10h56
  5. [D6] Conversion Array of String en String
    Par wizdom dans le forum Delphi
    Réponses: 2
    Dernier message: 23/05/2006, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo