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

C++Builder Discussion :

Comment Utiliser les WMI


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut WMI C++ Builder
    J'ai trouver des sources sur msdn pour utiliser la fonction Win32_TemperatureProbe pour avoir la temperature du systeme... Je comprend vraiment pa comment je pourrai l'utiliser sur c++ builder! Ce serai possible?? Sa fai 3 semaine je cherche, je trouve rien.... Ptetre je pose pa la bonne question a Google??? Quelqu1 pourrai maideer SVP

    En passant si quelqu'un sais la fonction pour savoir quel materiel est installer sur l'ordi (carte mere, cpu, ram...) j'ai essayer en passan par le registre mais il n'y a pa d'information appart pour le processeur....

    Merci d'avance!!!

  2. #2
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Tu as des infos sur la mémoire ici

  3. #3
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 65
    Points
    65
    Par défaut Comment Utiliser les WMI
    J'aimerai vraiment utiliser les WMI sur C++ Builder. Les exemples ne sont pa nombreux sur msdn et sur internet je n'en n'ai pas trouver...
    Personne ne sait les utiliser???

    De se que j'ai lu sur msdn on peut faire pleind de choses avec, se qui m'interresse surtout sait d'avoir des info sur mon hardware (cpu, temperature, type de carte mere...) j'ai trouver ce lien pour la temperature du cpu par exemple (http://msdn.microsoft.com/library/de...atureprobe.asp) mais pour l'utiliser sur bcb6 ????

    J'ai trouver quelque source mais du copier coller de la fonction sans comprendre pourquoi n'y comment... .

    Les codes que j'ai trouver utilisent CoInitialize et lWbemServices->ConnectServer(.....)

    Aidez-moi SVP je compren vraiment pa

    Si quelqu'un connai un tuto ou quelque chose... Sai étonnant que quelque chose d'aussi utile n'ai pa de tuto !!??

    Merci d'avance a tous...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    le monitoring de temperature m interesse egalement

    as tu trouvé une solution ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor

    cette cle du registre sous xp contient le nom du cpu
    je cherche le reste
    il me semble que tout est dans le registre

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    apres etude de la precedente source ( pompage et remaniement leger du code )

    je me suis interessé à Win32_Processor ( wmi class , lien msdn )

    placez sur la fiche un composant TListBox nommé lbSystemCheck


    unit.h

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    //---------------------------------------------------------------------------
     
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <CheckLst.hpp>
    #include <ComCtrls.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Composants gérés par l'EDI
            TListBox *lbSystemCheck;
    private:	// Déclarations de l'utilisateur
    public:		// Déclarations de l'utilisateur
     
     
     
     // Information Détaillées du Systeme par WMI [System Check]
    void GetWmiInfo(TStrings *lpList, WideString wsClass)
    {
      IWbemLocator *pWbemLocator = NULL;
      if(CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&pWbemLocator) == S_OK)
      {
        IWbemServices *pWbemServices = NULL;
        WideString wsNamespace = (L"root\\cimv2");
        if(pWbemLocator->ConnectServer(wsNamespace, NULL, NULL, NULL, 0, NULL, NULL, &pWbemServices) == S_OK)
        {
          IEnumWbemClassObject *pEnumClassObject = NULL;
          WideString wsWQL=L"WQL", wsQuery=WideString(L"Select * from ")+wsClass;
          if(pWbemServices->ExecQuery(wsWQL, wsQuery, WBEM_FLAG_RETURN_IMMEDIATELY,NULL, &pEnumClassObject) == S_OK)
          {
            IWbemClassObject *pClassObject = NULL;
            ULONG uCount = 1, uReturned;
            if(pEnumClassObject->Reset() == S_OK)
            {
              while(pEnumClassObject->Next(WBEM_INFINITE, uCount, &pClassObject, &uReturned) == S_OK)
              {
                SAFEARRAY *pvNames = NULL;
                if(pClassObject->GetNames(NULL, WBEM_FLAG_ALWAYS | WBEM_MASK_CONDITION_ORIGIN, NULL, &pvNames) == S_OK)
                {
                  long vbl, vbu;
                  SafeArrayGetLBound(pvNames, 1, &vbl);
                  SafeArrayGetUBound(pvNames, 1, &vbu);
                  for(long idx=vbl; idx<=vbu; idx++)
                  {
                    long aidx = idx;
                    wchar_t *wsName = 0;
                    VARIANT vValue;
                    VariantInit(&vValue);
                    SafeArrayGetElement(pvNames, &aidx, &wsName);
                    BSTR bs = SysAllocString(wsName);
                    HRESULT hRes = pClassObject->Get(bs, 0, &vValue, NULL, 0);
                    SysFreeString(bs);
                    if(hRes == S_OK)
                    {
                      AnsiString s;
                      Variant v = *(Variant*)&vValue;
                      if(v.IsArray())
                      {
                        for(int i=v.ArrayLowBound(); i<=v.ArrayHighBound(); i++)
                        {
                          Variant a = v.GetElement(i);
                          if(!s.IsEmpty())
                            s+=", ";
                            s+=VarToStr(a);
                        }
                      }
                      else
                      {
                        s = VarToStr(v);
                      }
                      lpList->Add(AnsiString(wsName)+"="+s);
                    }
                  VariantClear(&vValue);
                  SysFreeString(wsName);
                  }
                }
                if(pvNames)SafeArrayDestroy(pvNames);
              }
            }
            if(pClassObject)pClassObject->Release();
          }
          if(pEnumClassObject)pEnumClassObject->Release();
        }
        if(pWbemServices)pWbemServices->Release();
      }
      if(pWbemLocator)pWbemLocator->Release();
    }
     
     
     
     __fastcall TForm1(TComponent* Owner);
    };  
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif


    unit1.cpp

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #include <mmsystem.h>
    #include <winsock2.h>
    #include <StrUtils.hpp>
    #include <comdef.h>
    #include <wbemidl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
     
    int NbrRunUser;
    int NbrRunLocal;
    int ItemSelectV;
    int ItemSelectN;
    int ItemSelectC;
    int ClickSystemCheck = 0;
    int PeriphSystemCheck = 0;
    int NbrSystemCheck = 0;
     
    TStringList *SystemCheck = new TStringList();   
     
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
            CoInitialize(NULL);
      if(CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0) != S_OK)
       {
         ShowMessage("Erreur d'initilization du Programme");
         Application->Terminate();
       }
       CoUninitialize();  
        SystemCheck->Add("Win32_Processor");
        NbrSystemCheck = SystemCheck->Count;
     
     
        for(int NbrSystemCheckStrings = 0; NbrSystemCheckStrings<NbrSystemCheck; NbrSystemCheckStrings++)
        {
          AnsiString SystemCheckText = "Win32_Processor" ;
        }
     
            TStringList *SystemCheckViewLb = new TStringList();
            AnsiString SystemCheckedWin32 =  "Win32_Processor" ;
            GetWmiInfo(SystemCheckViewLb, AnsiReplaceText(SystemCheckedWin32, " ", "Win32_"));
            int NbrSystemCheckViewLb = SystemCheckViewLb->Count;
     
            if(NbrSystemCheckViewLb > 0)
            {
              lbSystemCheck->Items->Add("");
              lbSystemCheck->Items->Add("");
              lbSystemCheck->Items->Add("===============================[ " + SystemCheckedWin32 + " ]===============================");
              lbSystemCheck->Items->Add("");
              GetWmiInfo(lbSystemCheck->Items , AnsiReplaceText(SystemCheckedWin32, " ", "Win32_"));
            }
            else
            {
              lbSystemCheck->Items->Add("");
              lbSystemCheck->Items->Add("");
              lbSystemCheck->Items->Add("===============================[ " + SystemCheckedWin32 + " ]===============================");
              lbSystemCheck->Items->Add("- Peripherique pas pris en Charge");
            }
    }

    bon voilà toutes les infos de la class sont dispos , il ne reste qu à essayer de modifier le code pour avoir acces à certaines données en particulier

    Si vous avez un peu de temps , je vous remercie d avance

    PS il faut egalement recuperer le fichier wbemuuid.lib de la source originale

  7. #7
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Quand j'essaye tes lignes de code Builder me dit qu'il manque une librairie....
    Mes contributions phares en dev : www.rigaudie.fr

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut BATiViR:
    Dans la FAQ Delphi il y a des explications.
    Le lien
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  9. #9
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Je n'arrive toujours pas à utiliser ses données avec Win32 processor, qqun sait comment procéder ?
    Il me manque une librairie "wbemuuid.lib", comment l'inclure ?
    Mes contributions phares en dev : www.rigaudie.fr

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je pense qu'il te faut chercher de ce cote la
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  11. #11
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Mais le code est en delphi et je ne connait que le C....
    Mes contributions phares en dev : www.rigaudie.fr

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 81
    Points
    81
    Par défaut
    Ca peut t'aider. Des exemples wmi sur le lien suivant:
    http://codecentral.borland.com/Item/19443

  13. #13
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Dsl engrobel mais ton lien ne marche plus....
    Mes contributions phares en dev : www.rigaudie.fr

  14. #14
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par Général03 Voir le message
    Dsl engrobel mais ton lien ne marche plus....
    Il fonctionne pour moi.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  15. #15
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    C'est vrai ca marche maintenant je sais pas se que j'ai fait tout à l'heure....
    Mes contributions phares en dev : www.rigaudie.fr

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 81
    Points
    81
    Par défaut
    Pour accéder aux sources de CodeCentral il faut ouvrir un compte. C'est gratuit!

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

Discussions similaires

  1. [HTTP] Comment utiliser les POST par programation
    Par Popof dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 31/01/2005, 09h14
  2. Réponses: 4
    Dernier message: 13/12/2004, 20h37
  3. [COM] Comment utiliser les événements Word ?
    Par Laurent Dardenne dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 30/05/2004, 12h38
  4. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

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