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++ Discussion :

Lecture du registre style parseur


Sujet :

C++

  1. #1
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut Lecture du registre style parseur
    Bonjour à tous !

    Et oui encore moi... Cette gestion de parc m'occupe beaucoup ces derniers temps... En plus de ça, ça m'apprend beaucoup sur le language C++ ce qui est très bien.

    Alors voila, j'arrive à un moment de mon dev où il faut que je récupère la liste des logiciels installés sur le poste. Je veux donc récuperer les valeurs de la chaine "DisplayName" se trouvant dans une clé specifique au logiciel et qui se trouve toutes dans l'arborescence : "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

    Donc le but serait de se positionner sur cette arborescence et de descendre dans chaque sous clé et lire la valeur de la chaine en question...

    Mais comment faire, je sais lire une valeur de chaine dans une clé spécifique mais comment faire pour recuperer la premiere clé de l'arborescence, puis passer à la suivante etc... jusqu'à arriver à ce qu'il n'y en ai plus?

    J'ai bien trouvé des morceau de code par-ci par-là mais rien de bien concluant même en y passant ma matinée...

    Au fait, je code avec code::blocks et compile avec mingw !

    Je remercie encore une fois tous ceux qui pourront m'aider ou même juste se pencher sur mon problème.

    Promis, quand je serais devenu "bon", moi aussi je pourrais vous aider !

    Edit : Tiens d'ailleur si on pouvait m'expliquer comment mettre toute les valeures récupéré en mémoire et pouvoir les recuperer facilement, je sais faire en vb mais pas en c++...du moins.....pas encore! Merci !

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Verbalinsurection Voir le message
    Bonjour à tous !

    Et oui encore moi... Cette gestion de parc m'occupe beaucoup ces derniers temps... En plus de ça, ça m'apprend beaucoup sur le language C++ ce qui est très bien.

    Alors voila, j'arrive à un moment de mon dev où il faut que je récupère la liste des logiciels installés sur le poste. Je veux donc récuperer les valeurs de la chaine "DisplayName" se trouvant dans une clé specifique au logiciel et qui se trouve toutes dans l'arborescence : "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

    Donc le but serait de se positionner sur cette arborescence et de descendre dans chaque sous clé et lire la valeur de la chaine en question...

    Mais comment faire, je sais lire une valeur de chaine dans une clé spécifique mais comment faire pour recuperer la premiere clé de l'arborescence, puis passer à la suivante etc... jusqu'à arriver à ce qu'il n'y en ai plus?

    J'ai bien trouvé des morceau de code par-ci par-là mais rien de bien concluant même en y passant ma matinée...

    Au fait, je code avec code::blocks et compile avec mingw !

    Je remercie encore une fois tous ceux qui pourront m'aider ou même juste se pencher sur mon problème.

    Promis, quand je serais devenu "bon", moi aussi je pourrais vous aider !

    Edit : Tiens d'ailleur si on pouvait m'expliquer comment mettre toute les valeures récupéré en mémoire et pouvoir les recuperer facilement, je sais faire en vb mais pas en c++...du moins.....pas encore! Merci !
    La fonction RegEnumValue() est ton amie :-)

    Raymond
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    Merci pour ta réponse ram_0000.
    J'ai donc maintenant ce code :
    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
        string NomPc;
        HKEY hkKey;
        HKEY hkKeyOpened;
        char *subKey;
        subKey = new char;
        DWORD dwName = 512 * sizeof(TCHAR);
        int xSubKey = 0;
     
        if (RegConnectRegistry(NomPc.c_str(),HKEY_LOCAL_MACHINE,&hkKey) == ERROR_SUCCESS) {
            RegOpenKeyEx(hkKey, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\", 0, KEY_ALL_ACCESS, &hkKeyOpened);
            while(RegEnumKeyEx(hkKeyOpened, xSubKey, subKey, &dwName, NULL, NULL, NULL, NULL)!= ERROR_NO_MORE_ITEMS) {
                cout << subKey << endl;
                xSubKey++;
            }
        }
    et en sorti j'ai ça :
    AddressBook
    AddressBook
    AddressBook
    AddressBook
    Branding
    CCleane
    CCleane
    CCleane
    CCleane
    CCleane
    CCleane
    CCleane
    CCleane
    eMule
    eMule
    eMule
    eMule
    eMule
    ICW
    ICW
    ICW
    ICW
    ICW
    ICW
    ICW
    ICW
    ICW
    ...
    Je met pas tout sinon ça fait 2 pages , le nombre de ligne qu'il ressort correspond au nombre de cle dans le registre, mais pourquoi 3-4 fois la meme en sautant certaine, chelou... voila par exemple les premiere cle de mon regsitre :
    AddressBook
    All ATI Software
    AntiViral Toolkit Pro
    ATI Display Driver
    Branding
    CCleaner
    CNXT_MODEM_HDAUDIO_VEN_14F1&DEV_2BFA&SUBSYS_14F100C3
    CobBackup8
    Code::Blocks_is1
    etc..
    Merci encore pour vootre aide!

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Verbalinsurection Voir le message
    Merci pour ta réponse ram_0000.
    J'ai donc maintenant ce code :
    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
        string NomPc;
        HKEY hkKey;
        HKEY hkKeyOpened;
        char *subKey;
        subKey = new char;
        DWORD dwName = 512 * sizeof(TCHAR);
        int xSubKey = 0;
     
        if (RegConnectRegistry(NomPc.c_str(),HKEY_LOCAL_MACHINE,&hkKey) == ERROR_SUCCESS) {
            RegOpenKeyEx(hkKey, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\", 0, KEY_ALL_ACCESS, &hkKeyOpened);
            while(RegEnumKeyEx(hkKeyOpened, xSubKey, subKey, &dwName, NULL, NULL, NULL, NULL)!= ERROR_NO_MORE_ITEMS) {
                cout << subKey << endl;
                xSubKey++;
            }
        }
    et en sorti j'ai ça :


    Je met pas tout sinon ça fait 2 pages , le nombre de ligne qu'il ressort correspond au nombre de cle dans le registre, mais pourquoi 3-4 fois la meme en sautant certaine, chelou... voila par exemple les premiere cle de mon regsitre :

    Merci encore pour vootre aide!
    Je pense que tu fais une erreur dans l'appel à RegConnectRegistry() (et je suis même surpris que cela ne plante pas :-)

    Le troisième paramètre est l'adresse d'un tableau alloué au préalable. Dans ton can, tu fais "char *subKey = new char;", donc tu alloues un seul caractère.

    Le quatrième paramètre est l'adresse de la taille allouée de ton tableau.

    Si la taille allouée n'est pas suffisante, le fonction retourne avec le code ERROR_MORE_DATA et la taille désirée est retournée dans le 4eme parametre.

    voir http://msdn2.microsoft.com/en-us/library/ms724862.aspx pour plus d'info

    Hope this will help
    Raymond
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    merci encore à toi ram_0000 mais eu....comment dire....tu peux m'en dire plus, un exemple de code par exemple en utilisant le miens....

    Merci

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

Discussions similaires

  1. [Lecture Fichier] Optimisation du parseur
    Par MrDuChnok dans le forum Entrée/Sortie
    Réponses: 20
    Dernier message: 03/04/2009, 11h17
  2. RegEnumValue() pour la lecture de registre
    Par scarlaty dans le forum Windows
    Réponses: 5
    Dernier message: 28/02/2008, 09h04
  3. Lecture du Registre Windows
    Par mourbare dans le forum Windows
    Réponses: 2
    Dernier message: 27/02/2008, 08h42
  4. [CR9] Lecture du registre
    Par exyacc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 04/11/2005, 11h17
  5. Réponses: 4
    Dernier message: 23/07/2003, 13h07

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