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

Windows Discussion :

[Winreg.h] Récupérer le "chemin" courant


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut [Winreg.h] Récupérer le "chemin" courant
    Bonjour,

    Je suis en train de coder des classes s'occupant du registre, dans l'optique de l'utiliser dans un projet en cours. Cependant, j'aimerais savoir si c'est possible de récupérer (donc sans mémoriser de variables pour) le "chemin" de la clé ouverte, à partir d'un handle de clé HKEY.

    En effet, j'ai la méthode suivante :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //Path est soit un chemin relatif, soit absolu
    void Registry::cd(const std::string &path)
    {
        //Chemin absolu
        if(path.find("HKEY_") == 0)
            RegOpenKeyEx(
                            substr(0, path.find('\\')).c_str(),
                            substr(path.find('\\')).c_str(),
                            0, KEY_ALL_ACCESS,
                            &m_key
                        );
        else
            /* Chemin relatif -> chemin absolu ? */
    }
    Ceci, comme le code l'indique, pour le concaténer avec un chemin relatif, afin d'ouvrir la résultante.

    Merci d'avance.

    Edit: Au fait, j'ai aussi une méthode permettant de récupérer une instance de classe template Key<> (représentant une clé et possédant des méthodes get() et set()), pour pouvoir récupérer des données de toutes sortes. Utiliser REG_NONE comme type devrait suffire, pour RegSetValueEx(), non ?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    À mon avis, tu ne peux.

    De plus, le premier paramètre n'est pas du bon type : Ce doit être un HKEY déjà ouvert ou une des constantes HKEY_* que propose Windows.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Oups oui

    Donc je ne peux pas... il va falloir que je stocke le chemin, alors. Tant pis, merci quand même

    Edit: tiens bah justement : à partir de la string, comment puis-je récupérer la contante correspondante sans passer par les 5 tests ?
    Exemple : std::string str = "HKEY_CLASS_ROOT" -> (?) -> HKEY_CLASS_ROOT

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Pour récupérer à partir de la string, je ne vois que deux possibilités: suite de ifs ou conteneur genre std::map...

    Mais je ne vois pas trop pourquoi tu as besoin du chemin de la clé pour ouvrir une autre clé avec un chemin relatif... RegOpenKeyEx() prend justement en paramètre la clé précédemment ouverte...

    (Bien sûr, je ne pense pas que ça supporte le ".." comme "clé parente". Mais bon, ça, il faudra que tu le gères toi-même de toute façon, si tu décides de le gérer...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Exact ^^

    Sinon, juste pour vérifier : si j'ai un chemin absolu à charger, de la forme "HKEY_CLASS_ROOT\\Key\\Subkey", par exemple, est-ce ceci est fonctionnel ?
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RegOpenKeyEx(
                    HKeyCsteFromString(path.substr(0,path.find('\\'))),
                    path.substr(path.find('\\')).c_str(),
                    0,
                    KEY_ALL_ACCESS,
                    &key
                );
    (Où HKeyCsteFromString() récupère une des quatre constantes de clés racine.)

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    J'ai du mal à voir avec les strings C++, mais je pense que oui.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

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