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

  1. #1
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    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.

  3. #3
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    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...)

  5. #5
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    J'ai du mal à voir avec les strings C++, mais je pense que oui.

  7. #7
    Membre régulier Avatar de kidpaddle2
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 95
    Points
    95
    Par défaut
    Bon, d'accord. Merci, je vais m'y remettre

+ 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