Recherche dans le registre

Signaler
Messages postés
11
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
25 juillet 2012
-
Messages postés
11
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
25 juillet 2012
-
bonjour,

je cherche le moyen de récupère une string dans le registre
mais sans connaitre la clé
je vous montre en code

Var Registre : TRegistry;
Var Test :  TStringList;
begin

test  := TStringList.Create;

//Modifie l'url de la page de démarrage
Registre:=TRegistry.Create; //Crée un objet TRegistry
Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
Registre.OpenKeyReadOnly('\Software\MONAPP\client') ;// recupere les clé dans 'CLIENT'
Registre.Getkeynames(Test);


voilà la c'est facile je récupère les clés
mais je sais que dans chaque clé il y a la clé 'settings' qui contient mon string qui est 'TestString'

comment faire pour la récupéré ?

7 réponses

Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
44
Salut,

[hr]procedure TForm1.Button1Click(Sender: TObject);

[b]const
 /bKeyName : string =  '\Software\MONAPP\client\';
var  Test :  TStringList;
    I: Integer;
[b]begin
  with /bTRegistry.Create [b]do
  try
    /bRootKey : = HKEY_CURRENT_USER;  //Définit la clé principale
    if OpenKeyReadOnly(KeyName) then // recupere les clé dans 'CLIENT'
    [b]begin
      /bTest : =  TStringList.Create;
      [b]try
        /bGetkeynames(Test);
        CloseKey;
         for  I : = 0 to Test.Count-1 [b]do
          if /bOpenKeyReadOnly(KeyName + Test[I]) [b]then
          begin
            /bMemo1.Lines.Add(ReadString('settings'));
            CloseKey;
          end;
      [b]finally
        /bTest.Free;
      end;
    end;
  [b]finally
    /bFree;
  end;
end;
[hr]


[hr]@+Cirec
[hr]
Messages postés
11
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
25 juillet 2012

Re,

Merci de ton aide

alors aparament sa fonctionne
mais il ne récupère que le dernier

j'ai du améliorer
je te montre

const
 KeyName : string = '\Software\MONAPP\client\';
var Test :  TStringList;
    I: Integer;
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER; //Définit la clé principale
    if OpenKeyReadOnly(KeyName) then // recupere les clé dans 'CLIENT'
    begin
      Test := TStringList.Create;
      try
        Getkeynames(Test);
        RegN.clear;
        RegN.Lines.Add(test.text) ;
        CloseKey;
        for I := 0 to Test.Count-1 do
          if OpenKeyReadOnly(KeyName + Test[I]+'\Settings') then
          begin
            RegP.Clear;
            RegP.Lines.Add(ReadString('TestString'));
            CloseKey;
          end;
      finally
        Test.Free;
      end;
    end;
  finally
    Free;
  end;
end;


voila la il ne me donne que la dernière clé....
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
44
j'ai fait le code pour un type précis d'arborescence .. j'ai du mal comprendre ta structure :
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\MonApp]

[HKEY_CURRENT_USER\Software\MonApp\Client]

[HKEY_CURRENT_USER\Software\MonApp\Client\Client_1]
"settings"="TestString_1"

[HKEY_CURRENT_USER\Software\MonApp\Client\Client_2]
"settings"="TestString_2"

[HKEY_CURRENT_USER\Software\MonApp\Client\Client_3]
"settings"="TestString_3"


montre moi exactement comment sont tes données fais un export de la clé "MonApp" et cole le résultat ici

[hr]@+Cirec
[hr]
Messages postés
11
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
25 juillet 2012

re,

Dans client_1,2,3 etc. il y a encore une clé qui se nomme settings.

Et dans settings je lis le string teststring.

En gros voilà le schéma


[HKEY_CURRENT_USER\Software\MonApp]

[HKEY_CURRENT_USER\Software\MonApp\Client]

[HKEY_CURRENT_USER\Software\MonApp\Client\???]

[HKEY_CURRENT_USER\Software\MonApp\Client\???\settings]

les ??? a chercher et en suite lire le string TESTstring qu'il y a dans settings
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
44
selon ton schéma:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\MonApp]

[HKEY_CURRENT_USER\Software\MonApp\Client]

[HKEY_CURRENT_USER\Software\MonApp\Client\Client_1]

[HKEY_CURRENT_USER\Software\MonApp\Client\Client_1\settings]
"TestString"= "TestString_1"

[HKEY_CURRENT_USER\Software\MonApp\Client\Client_2]

[HKEY_CURRENT_USER\Software\MonApp\Client\Client_2\settings]
"TestString"="TestString_2"

[HKEY_CURRENT_USER\Software\MonApp\Client\Client_3]

[HKEY_CURRENT_USER\Software\MonApp\Client\Client_3\settings]
"TestString"="TestString_3"




[hr] procedure  TForm1.Button1Click(Sender: TObject);

[b]const
 /bKeyName : string  = '\Software\MONAPP\client\';
var Test :  TStringList;
    I: Integer;
[b]begin
  with /bTRegistry.Create [b]do
  try
    /bRootKey :=  HKEY_CURRENT_USER;  //Définit la clé principale
     if  OpenKeyReadOnly(KeyName) then // recupere les clé dans 'CLIENT'
    [b]begin
      /bTest : = TStringList.Create;
      [b]try
        /bGetkeynames(Test);
        CloseKey;
        for I := 0 to Test.Count-1 [b]do
          if /bOpenKeyReadOnly(KeyName + Test[I] + '\settings') [b]then
          begin
            /bMemo1.Lines.Add(ReadString('TestString'));
            CloseKey;
          end;
      [b]finally
        /bTest.Free;
      end;
    end;
  [b]finally
    /bFree;
  end;
end;
[hr]tout simplement ...
il y avait juste à ajouter "\settings"


[hr]@+Cirec
[hr]
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
44
je viens de saisir ton problème !!

en fait tu avais bien modifié le code pour tes besoins ... t'as juste fait une erreur :
          begin
            RegP.Clear;
            RegP.Lines.Add(ReadString('TestString'));
            CloseKey;
          end;

à remplacer par:
          begin
            //RegP.Clear; <-- ici tu éffaçais toute la liste du coup il ne restait que le dernier !!
            RegP.Lines.Add(ReadString('TestString'));
            CloseKey;
          end;



[hr]@+Cirec
[hr]
Messages postés
11
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
25 juillet 2012

Re,

Oui j'ai vu l'erreur merci beaucoup pour ton aide vive delphiFR