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 :

Lister les softs installés sur un Pc [Trucs & Astuces]


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [Resolu] Lister les softs installés sur un Pc
    Comment puis-je récupérer une liste des softs installés sur un Pc du réseau. J'y arrive en partie en accédant au registre mais pour les produits Microsoft, j'obtiens un numéro.

    Merci de votre aide.

    JFLGB.

  2. #2
    Membre à l'essai
    Inscrit en
    Octobre 2002
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Salut,

    Je ne comprends pas comment un numéro. Si tu lis la base de registre (HKEY_LOCAL_MACHINE/SOFTWARE je suppose) tu as la liste des logiciels. Pour Microsoft, c'est un niveau plus bas.

    Suivant l'OS que tu utilises, ton problème devient donc d'obtenir la liste des sous-clés d'une entrée.
    Cordialement

    Patrick

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Y'a des composants qui font sa tout seul et tres bien comme telechargeable sur ce site

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    J'interroge une autre clé de la base de registre (UNINSTALL) et je parcourt toute les sous-clés à la recherche d'une valeur DisplayName

  5. #5
    Membre régulier Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Points : 85
    Points
    85
    Par défaut
    Bonjour à vous, j'aimerais également si possible récupérer aussi les logiciels installées sur un poste réseau mais dans ce sujet il n'y pas pas de code pour m'aider, quelqu'un pourrait à mieux comprendre cette solution par la base de registre puisque c'est la méthode utilisée ici, et d'après mes recherches et discussion avec une personne de ce forum, cette personne me diser que l'on ne récuperer que le nom de dossier du programme mais pas le nom du logiciel, est ce vrai ?? (je donne un ex: cette personne m'as dis que pour adobe photoshop ou adobe acrobat reader ... on trouver qu'un dossier adobe dans le registre donc on ne savais pas programme adobe était installé). Merci par avance de vos réponses.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    J'envois mon code telque je l'utilise, il faut mettre un peu d'ordre, mais je pense que ca va beaucoup t'aider!

    Voici la fonction d'interrogation de la base de registre
    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
    //Interrogation of Registry
     
    //Multi=1 for many occurences other number for 1 occurence
    //Return ListString empty if unable to connect to Registry or unable to open/find key into Registry
     
    TStringList* Network::Info(AnsiString Station, AnsiString RegKey, AnsiString RegValue, int Multi)
    {
    int i;
    AnsiString DataType;
    //String list containing the names of all subkeys belonging to the current key.
    TStringList* pkgstrings = new TStringList();
    //String list containing desired infos.
    TStringList* pkg = new TStringList();
    TRegistry* reg = new TRegistry;
    AnsiString RegKeyTemp;
     
    if (Station != NULL)    //If Station isn't NULL
        {
        reg->RootKey = HKEY_LOCAL_MACHINE;  //Initialize the RootKey
        if (!reg->RegistryConnect(Station)) //If can't connect to th Registry of the Station
            {
            ShowMessage("ERROR: Unable to connect to remote registry of "+Station+".");     //Message
            pkg->Clear();   //pkg clear
            }
        else
            {
            if (!reg->OpenKey(RegKey, false))       //If can't connect the RegKey
                {
                ShowMessage("ERROR: Unable to open or find the registry key into "+Station+".");    //Message
                pkg->Clear();       //pkg clear
                }
            else
                {
                //Returns a string list containing the names of all subkeys
                // belonging to the current key.
                if (Multi!=0)       //If more then 1 value to reteive
                    {
                    reg->GetKeyNames(pkgstrings);       //Get all subkey of the selected RegKey into pkgstrings
                    for (i=0; i<pkgstrings->Count; i++)     //For the count of pkgstrings
                        {
                        reg->CloseKey();    //Close the Key
                        RegKeyTemp=RegKey+pkgstrings->Strings[i];   //Path of the RegKey
                        RegKeyTemp+="\\";
                        reg->RootKey = HKEY_LOCAL_MACHINE;
                        reg->RegistryConnect(Station);      //Connect to the Registry of the Station
                        reg->OpenKey(RegKeyTemp, false);    //Open the Key
                        if (reg->ValueExists(RegValue))     //If Key exist
                            {
                            pkg->Add(reg->ReadString(RegValue));    //Add value into pkg
                            }
                        }
                    pkg->Sort();    //pkg Sorted
                    }
                else        //Only one value to retreive
                    {
                    if (reg->ValueExists(RegValue)) //If Key exist
                        {
                        DataType = reg->GetDataType(RegValue); //DataType get the type of the Key
                        if (DataType == 3)  //Key is a Integer
                            {
                            pkg->Add(reg->ReadInteger(RegValue));   //Add value into pkg
                            }
                        else    //Key is a String
                            {
                            pkg->Add(reg->ReadString(RegValue));    //Add value into pkg
                            }
                        }
                    else
                        {
                        pkg->Add("N/A");    //Add N/A into pkg
                        }
                    }
                reg->CloseKey();    //Close the Key
                }
            }
        }
    return pkg;
    }
    Voici le code appelant la fonction pour récupérer les softs
    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
    //Softs
     
    void __fastcall Values::StationSoft(AnsiString Station)
    {
    RegKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\";
    RegValue="DisplayName";
     
    pkgTemp = NetW.Info(Station, RegKey, RegValue, 1);      //pkgTemp received vale(s) from interrogation of Registry
    pkgTemp->Sort();        //pkgTemp sorted
     
    if(pkgTemp->Count)      //If value(s) into pkgTemp
        {
        for(int j = 0; pkgTemp->Count>j;j++)        //For count of pkgTemp
            {
            Search = DelElemIntoString(pkgTemp->Strings[j], "'");   //Call function to elimination of '
     
            Id = Data.ReturnId("SOFT", "ID", "NAME", Search);
            //Test if value already exist
            Test=Data.ValueExist("STATION_SOFT", "STATION_ID", "SOFT_ID", IdStation, Id);
            if (!Test)
                {
                Data.AddToTable("STATION_SOFT", "STATION_ID", "SOFT_ID", IdStation, Id);
                }
            }
        }
    else
        {
        Search = "Diconnected";
        }
    }

  7. #7
    Membre régulier Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Points : 85
    Points
    85
    Par défaut
    Merci beaucoup de ta réponse aussi rapide, tout ton code et à mettre dans le .cpp si j'ai bien suivi ta méthode. J'ai une question qui doit être relativement évident mais je ne vois pas la réponse, comment varaiable récupérer afin d'afficher le résultat de cette recherche dans une ListBox par Exemple ou autre composant visuel sur la forme ??
    Merci grandement pour ton aide, je vais tester cela avec ce qu'il sera affiché sur ma forme et ce qui est installé sur le pc.
    Merci par avance de ta réponse.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Points : 337
    Points
    337
    Par défaut
    Network::Info te renvoie un TStringList*

    Il suffit d'assigner le StringList au listbox...

    Ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AnsiString RegKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\",
               RegValue="DisplayName"; 
     
    TStringList *pkgTemp = NetW.Info(Station, RegKey, RegValue, 1); 
    pkgTemp->Sort();
     
    ListBox1->Items->Assign(pkgTemp);

  9. #9
    Membre régulier Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Points : 85
    Points
    85
    Par défaut
    Bon j'ai bien suivi votre méthode à tous les deux mais même en ajoutant le #include <registry.hpp> il me reste une bonne dizaines d'erreur de compilations, alors que 'en est enlever déjà trois ou quatre. Mais là les autres je ne vois pas d'où elle vienne. Quelqu'un à tester ce code ?? Car je suis sure qu'il fonctionne et que j'ai fait une erreur mais je ne vois pas où. Merci de votre aide.

  10. #10
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    oui oui je l'ai testé ... ca marche nickel ...

    voici comment je l'ai traité :

    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
     
    //---------------------------------------------------------------------------
    #include "Registry.hpp"
    //---------------------------------------------------------------------------
    void ListeLogiciel(TStrings *listeprog,AnsiString Station, AnsiString RegKey,AnsiString RegValue,int Multi)
    {
       AnsiString temp;
       listeprog->Clear();
     
       if (Station!=NULL)
       {
          TRegistry* reg=new TRegistry;
          reg->RootKey=HKEY_LOCAL_MACHINE;
          if (reg->RegistryConnect(Station))
          {
             if (reg->OpenKey(RegKey, false))
             {
                if (Multi!=0)
                {
                   TStringList* listeprogtemp=new TStringList();
                   reg->GetKeyNames(listeprogtemp);
                   for (int i=0;i<listeprogtemp->Count;i++)
                   {
                      reg->CloseKey();
                      temp=RegKey+listeprogtemp->Strings[i];
                      temp+="\\";
                      reg->RootKey = HKEY_LOCAL_MACHINE;
                      reg->RegistryConnect(Station);
                      reg->OpenKey(temp, false);
                      if (reg->ValueExists(RegValue))
                         listeprog->Add(reg->ReadString(RegValue));
                   }
                   delete listeprogtemp;
                }
                else
                {
                   if (reg->ValueExists(RegValue))
                   {
                      if (reg->GetDataType(RegValue)==3)
                         listeprog->Add(reg->ReadInteger(RegValue));
                      else
                         listeprog->Add(reg->ReadString(RegValue));
                   }
                   else
                      listeprog->Add("N/A");
                }
                reg->CloseKey();
             }
          }
          delete reg;
       }
    }
    //---------------------------------------------------------------------------
    et voici comment je l'appelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListeLogiciel(ListBox1->Items,StrUpper(getenv("LOGONSERVER")),"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\","DisplayName",1);

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Moi je voudrais recuperer les softs, mais installés sur la machine qui execute le programme...
    Je peux supprimer quoi la dedans ? Passque je comprends pas tant...

    Merci de vos réponses !

  12. #12
    Membre régulier Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Points : 85
    Points
    85
    Par défaut
    Freeze je te remercie vraiment beaucoup puisque cela fonctionne très bien, mais par contre il me trouve en gros que la moitié des programmes que l'on trouve en faisant panneau de configuration, ajout/suppression de programme, est ce normal ???
    Sinon pour Strem le code de Freeze fonctionne pour la machine sur laquelle est lancée ce code.
    Merci par avance de vos réponses.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Wouuuuuh pinaize !

    C'est supaaiiiir !
    Merci beaucoup Freeze !

  14. #14
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par batmat
    Sinon pour Strem le code de Freeze fonctionne pour la machine ce laquel est lancer ce code.
    oui effectivement cela vient de ce morceau de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StrUpper(getenv("LOGONSERVER")),"
    qui renvoie le nom du pc sous la forme \\NOMPC

  15. #15
    Membre régulier Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Points : 85
    Points
    85
    Par défaut
    OK merci Freeze alors dans ce cas est il possible d'exécuter ce code afin de récupérer les programmes installé sur une machine du réseau local à distante ?? Par exemple en indiquant l'adresse Ip de la machine où l'on cherche les programmes installés, ou alors le nom. Car je viens d'effectuer un test en essayant avec ces paramètres mais cela ne fonctionne, est ce que cela est possible d'accéder à distance à ces informations ??
    Je vous remercie encore par avance de toute l'aide utilise que vous nous apportés.

  16. #16
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    je ne sais pas ... c'est à essayer effectivement ... pourquoi pas ??
    tiens moi au courant ...

  17. #17
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Ouais, il a pas l'air convaincu...
    Je lui ai demandé de regarder la base de registre de 192.168.0.21 (un poste de mon reseau) et.....
    ...rien.
    Dommage !
    Par contre, quand tu met 127.0.0.1 ou ton adresse ip, ya pas de pb.
    Voila pr les ptites questions

  18. #18
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    je confirme que ca marche ... j'ai teste avec une autre adresse ... ca marche tres bien ...

    pour mon exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListeLogiciel(ListBox1->Items,StrUpper(getenv("LOGONSERVER")),"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\","DisplayName",1);
    il faut remplacer :

    StrUpper(getenv("LOGONSERVER"))
    par

    "\\\\AdresseIP"

  19. #19
    Membre régulier Avatar de batmat86
    Homme Profil pro
    Charge de clientele
    Inscrit en
    Octobre 2003
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Charge de clientele

    Informations forums :
    Inscription : Octobre 2003
    Messages : 239
    Points : 85
    Points
    85
    Par défaut
    Ba moi je viens de tester ta méthode freeze et cela ne fonctionne pas. Cela compile mais à l'exécution sa plante, j'ai une erreur de violation ...
    Pourquoi ?? Alors je c'est que cette machine et sur le réseau.
    A la place de
    StrUpper(getenv("LOGONSERVER"))
    J'ai mis
    StrUpper(getenv("\\\\130.176.1.93"))
    merci de ton aide.

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

Discussions similaires

  1. lister les Sqlservers Installer sur mon PC
    Par azstar dans le forum C#
    Réponses: 2
    Dernier message: 02/09/2010, 12h56
  2. Lister les imprimantes installées sur le poste
    Par fhmayn dans le forum WinDev
    Réponses: 5
    Dernier message: 26/08/2010, 18h15
  3. [.NET 2.0] Lister les programmes installés sur un PC
    Par Aspic dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/04/2007, 18h01
  4. Lister les codecs installés sur la machine
    Par hanane_iaai dans le forum Windows
    Réponses: 6
    Dernier message: 18/07/2005, 10h17
  5. Réponses: 5
    Dernier message: 04/05/2005, 15h39

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