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

Lazarus Pascal Discussion :

Comment recupérer le contenu des fonctions ou variables WMI ? [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Par défaut Comment recupérer le contenu des fonctions ou variables WMI ?
    Bonjour,

    Je possède Delphi 7 et ayant eu du mal à le faire fonctionner avec win 8, j'étais passé sur Lazarus.
    Récemment, j'ai retenté l'installation en mode administrateur comme conseillé et ça marche. Suite au tutoriel de Laurent Dardenne, j'ai tenté d'importer l'activeX Wbemdisp.tlb, mais cela ne me donne rien de plus dans les outils de Delphi.
    Alors je suis de nouveau reparti vers Lazarus.
    J'ai trouvé à cette adresse (https://github.com/rruz/tsmbios) des exemples de code Lazarus qui fonctionnent mais seulement en mode console et je ne sais pas comment récupérer les valeurs dans dans un mémo par exemple.

    Merci à celui qui pourrait m'éclairer ?

    Michel Suire

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 142
    Par défaut
    Citation Envoyé par msuire Voir le message
    et je ne sais pas comment récupérer les valeurs dans un mémo par exemple.
    Si je devais faire, je remplacerais tous les "WriteLn" par des "memo.Lines.Add()" mais attention, il y a une petite adaptation à faire à chaque ligne.

    Exemple avec deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            WriteLn(Format('Size           %d Mbytes',[LMemoryDevice.GetSize]));
            WriteLn(Format('Device Locator %s',[LMemoryDevice.GetDeviceLocatorStr]));
    vont devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            memo.Lines.Add('Size ' + IntToStr(LMemoryDevice.GetSize) +' Mbytes');
            memo.Lines.Add('Device Locator ' + LMemoryDevice.GetDeviceLocatorStr);
    Y a p'têt' moyen de garder le "Format" mais j'ai un peu la flemme de chercher/tester (fait trop chaud...)

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 244
    Par défaut
    hello,
    le code que tu nous présentes n'est pas du WMI. Quelles infos veux-tu récupérer ? Il y a moyen de faire du WMI assez simplement en Lazarus.

    Ami calmant, J.P

  4. #4
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Par défaut
    Bonjour Jurassik,

    Je ne suis qu'un amateur en terme de programmation et je pensai que les exemples de code de https://github.com/rruz/tsmbios étaient basé sur le WMI.
    En fait, je voudrai récupérer les adresse MAC wifi et Ethernet, la marque de la carte mère et le numéro de série, les caractéristiques des disque durs... Si j'ai une piste pour ces éléments ce serait déjà pas mal.
    Concernant la proposition de JiPeTe, j'avais déjà essayé cette solution, mais sans grand succès...

    Merci pour votre implication.

    Michel Suire

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 244
    Par défaut
    hello,
    je mets en pièce jointe une unité (utilwmi.pas) avec une fonction expérimentale ( elle est brute de fonderie et contient certainement des bugs) qui permet de récupérer des informations par WMI sous windows. Voici la syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Function GetWMIInfo(const WMIClass: string ; const WMIProperty:tstringList;
                         const Condition: string = ''): Tlist
    le paramètre WMIClass est la classe WMI à inspecter exemple : Win32_NetworkAdapter
    le paramètre WMIProperty est la liste des propriétés à récupérer exemple : Name, MacAddress
    le paramètre conditionnel condition est la condition de sélection des propriétés exemple : WHERE NETENABLED = TRUE

    le résultat est une liste de listes des propriétés.

    Voici un exemple d'utilisation qui affiche dans un mémo les noms et mac addresses des cartes réseaux actives :
    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
    procedure TForm1.Button3Click(Sender: TObject);
    var ResultatWMI : TList;
        Infos : TStringList;
      i,j       : Integer;
    begin
      Memo1.Clear;
      Infos := TstringList.Create;
      // Préparation des paramètres à chercher
      Infos.CommaText:='Name=,ProductName=,MACAddress=';
      ResultatWMI := GetWMIInfo('Win32_NetworkAdapter',Infos,'WHERE NETENABLED = TRUE');
       for i := 0 to ResultatWMI.Count-1 do
        begin
         Memo1.Lines.add('================================================');
         for j := 0 to Infos.Count-1 do
             begin
             Memo1.Lines.add(TstringList(ResultatWMI[i]).Names[j]+' : '+
             TstringList (ResultatWMI[i]).ValueFromIndex[j]);
             end;
        end;
      // Nettoyage
        for i := 0 to ResultatWMI.Count-1 do
             begin
               TstringList(ResultatWMI[i]).Free;
             end;
    Mettre l'unité dans le répertoire de son projet et rajouter l'unité dans le uses.
    Si vous voyez des corrections ou des améliorations à faire n'hésitez pas à me le dire.



    Ami calmant, J.P
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 142
    Par défaut
    Citation Envoyé par msuire Voir le message
    Concernant la proposition de JiPeTe, j'avais déjà essayé cette solution, mais sans grand succès...
    Sans grand succès...

    Ouaip, ça c'est du lourd et de la haute précision dans le genre description du problème...
    Tu ne nous aides pas à t'aider, là !

  7. #7
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Par défaut
    Re-bonjour Jurassik,

    Je rentre du boulot et je viens de tester ce que tu proposes. C'est parfait: les résultats sont là et même si je n'ai pas encore tout compris, je m'attèle à la tâche. Ne serait-ce que par respect de ton engagement.

    Merci et à +

    Michel Suire

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2007, 11h01
  2. Réponses: 9
    Dernier message: 24/05/2005, 16h34
  3. Comment séparer le contenu des pages de leur structure?
    Par djodjo dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 06/05/2005, 14h48

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