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 clés contenues dans HKEY_USERS (Registre)


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 25
    Points : 27
    Points
    27
    Par défaut Lister clés contenues dans HKEY_USERS (Registre)
    Bonjour,
    je souhaite lister les clés contenues dans HKEY_USERS.
    J'ai trouvé ce bout de code dans la faq de C++ Builder, je l'es modifié à mes besoins, cependant il ne fonctionne pas (le programme affiche 0 comme nombre de sous-clés). D'ou vient le problème?
    Merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TRegistry *registre = new TRegistry();
    TStringList *mesCles = new TStringList();
     
    registre->RootKey = HKEY_USERS;
    registre->GetKeyNames(mesCles);
    ShowMessage(mesCles->Count); // affiche le nombre de sous-clés
     
    delete registre;
    delete mesCles;

  2. #2
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    HKEY_USERS n'est pas une clé mais une ruche. La commande GetKeyNames suppose qu'on a sélectionné une clé au préalable pour pouvoir connaître ses sous-clés.
    RAD Studio 10.3 / Ubuntu 20.04 - RYZEN 7 2700X - 24Go de RAM

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Points : 146
    Points
    146
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "GetKeyNames permet de déterminer les noms de toutes les sous-clés de la clé en cours"
    Je pense que tu devrais d'abord ouvrir une clé avec OpenKey, et ensuite avec ton GetKeyNames lire toutes les sous-clés de cette clé en cours.

  4. #4
    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 Futixu:
    Voici un bout de code qui permet de lire ecrire effacer dans la base de registre ( ce code permet d'afficher une boite de dialogue au redemarrage de Window ), je pense que cela va t'aider a comprendre comment mener a bien ton projet.
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include <Registry.hpp> // <--- ne pas oublier
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    // ce programme fonctionne sur XP pro Pack1, a verifier que ces clefs existent bien au meme
    // emplacement sur un autre systeme d'exploitation, vous modifiez la base
    // de registre a vos risques et perils
    {
    // on lit la valeur des clefs
    TRegistry *registre = new TRegistry();
    registre->RootKey = HKEY_LOCAL_MACHINE;
    registre->OpenKey("\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", true);
    // on lit la valeur de la premiere clef
    if (registre->KeyExists("LegalNoticeCaption"));
    {
    if (registre->ValueExists("LegalNoticeCaption"));
    {
    Edit1->Text = registre->ReadString("LegalNoticeCaption");
    }
    }
    // on lit la valeur de la deuxieme clef
    if (registre->KeyExists("LegalNoticeText"));
    {
    if (registre->ValueExists("LegalNoticeText"));
    {
    Memo1->Text = registre->ReadString("LegalNoticeText");
    }
    }
    delete registre;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    // on efface la valeur des clefs
    TRegistry *registre = new TRegistry();
    registre->RootKey = HKEY_LOCAL_MACHINE;
    registre->OpenKey("\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", true);
    // on efface la valeur de la premiere clef
    if (registre->KeyExists("LegalNoticeCaption"));
    {
    if (registre->ValueExists("LegalNoticeCaption"));
    {
    registre->WriteString("LegalNoticeCaption", "");
    }
    }
    // on efface la valeur de la deuxieme clef
    if (registre->KeyExists("LegalNoticeText"));
    {
    if (registre->ValueExists("LegalNoticeText"));
    {
    registre->WriteString("LegalNoticeText", "");
    }
    }
    delete registre;
    // on efface le TEdit et le TMemo
    Edit1->Text = "";
    Memo1->Text = "";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    // on ecrit la valeur des clefs
    TRegistry *registre = new TRegistry();
    registre->RootKey = HKEY_LOCAL_MACHINE;
    registre->OpenKey("\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", true);
    // on ecrit la valeur de la premiere clef
    if (registre->KeyExists("LegalNoticeCaption"));
    {
    if (registre->ValueExists("LegalNoticeCaption"));
    {
    registre->WriteString("LegalNoticeCaption", Edit1->Text);
    }
    }
    // on ecrit la valeur de la deuxieme clef
    if (registre->KeyExists("LegalNoticeText"));
    {
    if (registre->ValueExists("LegalNoticeText"));
    {
    registre->WriteString("LegalNoticeText", Memo1->Text);
    }
    }
    delete registre;
    // on efface le TEdit et le TMemo
    Edit1->Text = "";
    Memo1->Text = "";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
    // on quitte le programme
    Form1->Close();
    Application->Terminate();
    }
    //---------------------------------------------------------------------------
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 25
    Points : 27
    Points
    27
    Par défaut
    Bonjour,
    j'ai trouvé la solution à mon problème,
    j'ai rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    registre->OpenKeyReadOnly("");
    comme vous me l'avez dis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TRegistry *registre = new TRegistry();
    TStringList *mesCles = new TStringList();
     
    registre->RootKey = HKEY_USERS;
    registre->OpenKeyReadOnly("");
    registre->GetKeyNames(mesCles);
    ShowMessage(mesCles->Count); // affiche le nombre de sous-clés
     
    delete registre;
    delete mesCles;
    Merci à vous tous.

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

Discussions similaires

  1. Lister des valeurs dans le registre
    Par rdver dans le forum VBScript
    Réponses: 2
    Dernier message: 30/10/2012, 10h46
  2. [Débutant] Lister le contenu dans dossier
    Par Bastien_Witczak dans le forum VB.NET
    Réponses: 4
    Dernier message: 19/10/2012, 22h01
  3. Réponses: 11
    Dernier message: 03/05/2006, 17h06
  4. [MySQL] Lister le contenu d'une table dans un tableau HTML
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 03/04/2006, 19h40
  5. Lister le contenu d'un dossier dans une ListBox
    Par zidenne dans le forum Langage
    Réponses: 2
    Dernier message: 25/10/2005, 12h51

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