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

Delphi Discussion :

WMI fonction tableau


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut WMI fonction tableau
    Bonjour à tous,
    Je suis entrain de créer une application qui affiche les paramètres du PC via WMI (ip, gateway, nom du pc, ...). Vu toutes les infos que j'aimerai récuperer j'ai créer une fonction. Le problème est que quand par exemple je liste toutes les cartes réseaux de mon pc avec la fonction, la fonction explore toutes les cartes réseau et result me renvoie le derniere ce qui est logique. Alors je me suis dit qu'il fallait mettre le resultat dans un tableau comme sa je pourrais tout récuperer. Débutant sous delphi, je n'arrive pas a mettre dans le tableau voila ma fonction, elle ne gère pas encore les erreur et je vais surement avoir des problème par rapport a quel type d'info WMI va me renvoyer mais je verrais sa plus tard... Si quelqu'un voit comment faire merci d'avance
    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
    function InfoWMI(Instance, Properties : String) :String;
    var
      WmiLocator:          TSWbemLocator;
      WmiService:          SWbemServices;
      WmiObjectSet:        SWbemObjectSet;
      WmiObject:           SWbemObject;
      //WmiProperty:         SWbemProperty;
     
      ObjectEnumerator:    IEnumVariant;
     
      ArrayVariant:        OleVariant;
      NumberItem:          LongWord;
     
      OldCursor:           TCursor;
      i: integer;
    begin
      i := 0;
      WmiLocator:= TSWbemLocator.Create(nil);
      try
        OldCursor := Screen.Cursor;
        Screen.Cursor := crAppStart;
        // Connexion WMI (PCName, 'ROOT\CIMV2', UserName, UserPassword, '', '', ...)
        WmiService:= WMILocator.ConnectServer('.', 'ROOT\CIMV2', '', '', '',
                                              '', wbemConnectFlagUseMaxWait, nil);
        WmiObjectSet := wmiService.InstancesOf(Instance,
                                                wbemFlagReturnWhenComplete, nil);
        // Affecte un énumérateur pour la collection d'objet SWbemObject
        ObjectEnumerator:= (WmiObjectSet._NewEnum) as IEnumVariant;
     
        // Retourne NumberItem éléments dans le tableau ArrayVariant,
        while (ObjectEnumerator.Next(1, ArrayVariant, NumberItem) = S_OK) do
        begin
          i := i + 1;
          // Récupére de la collection l'objet SWbemObject courant
          WmiObject := IUnknown(ArrayVariant) as SWBemObject;
     
          // Retrouve la propriétés de l'instance au format MOF
          Result := AdjustLineBreaks(WmiObject.Properties_.Item(Properties,0).Get_Value);
          test[i] := WmiObject.Properties_.Item(Properties,0).Get_Value;
     
        end;
        Screen.Cursor:= OldCursor;
      Finally;
        WmiLocator.Free;
      end;
    end;

  2. #2
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    C'est pas très clair : tu récupères quoi en fait : une string par carte réseau c'est ça ?

  3. #3
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut
    Oui enfaite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result := AdjustLineBreaks(WmiObject.Properties_.Item(Properties,0).Get_Value);
    me renvoie le nom de ma carte réseau, la properties = 'Description'

  4. #4
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Ben le plus simple c'est d'utiliser une TStringList.
    Pour rajouter des string (une par carte si j'ai compris) tu prends la fonction Add.

    Pour lister toutes tes strings tu fais un code style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for iBcl := 0 to myTStringList.count-1 do
    begin
       showMessage(myTStringList[iBcl]);
    end;
    Attention pour utiliser une TStringList il faut la 'créer' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myTStringList :=TStringList.create;
    et faire un free à la fin.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut
    Je ne comprend pas comment faire que result me retourne un TStringListe. Pourrais-tu être plus détaillé je débute en delphi et cela est ma première fonction

  6. #6
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    aah !
    Ben dans ta boucle tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myTStringList.add(WmiObject.Properties_.Item(Properties,0).Get_Value);

  7. #7
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut
    Merci sa marche parfait! Maintenant le seul problème est que si je lui demande par exemple l'adresse ip de la carte réseau il fau que je mette

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Proprietes = 'IPAddress';
    edIP := WmiObject.Properties_.Item(Proprietes,0).Get_Value[0];
    et si je lui demande la description
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Proprietes = 'Description';
    edName := WmiObject.Properties_.Item(Proprietes,0).Get_Value;
    Mon problème est que je vais utiliser la fonction pour les 2, et dans un il faut mettre (Get_Value[0] car il me renvoie un tableau et dans l'autre il faut (Get_Value.
    Comment savoir si c'est un tableau ou un string??

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

Discussions similaires

  1. fonction d'une fonction , tableau
    Par marty499 dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2008, 09h58
  2. Fonction tableau de type external
    Par julesu dans le forum Fortran
    Réponses: 3
    Dernier message: 16/01/2008, 17h45
  3. Réponses: 13
    Dernier message: 13/10/2005, 16h03
  4. Réponses: 3
    Dernier message: 05/10/2005, 17h26
  5. [LG]Parametres ou resultat de fonction : tableau
    Par patdez dans le forum Langage
    Réponses: 2
    Dernier message: 12/05/2004, 12h19

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