Recherche dans le registre

cs_casper150 Messages postés 11 Date d'inscription mercredi 23 août 2006 Statut Membre Dernière intervention 25 juillet 2012 - 14 juil. 2010 à 12:29
cs_casper150 Messages postés 11 Date d'inscription mercredi 23 août 2006 Statut Membre Dernière intervention 25 juillet 2012 - 14 juil. 2010 à 21:36
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

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
14 juil. 2010 à 13:20
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]
cs_casper150 Messages postés 11 Date d'inscription mercredi 23 août 2006 Statut Membre Dernière intervention 25 juillet 2012
14 juil. 2010 à 14:46
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é....
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
14 juil. 2010 à 16:03
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]
cs_casper150 Messages postés 11 Date d'inscription mercredi 23 août 2006 Statut Membre Dernière intervention 25 juillet 2012
14 juil. 2010 à 17:28
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
14 juil. 2010 à 17:59
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]
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
14 juil. 2010 à 19:30
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]
cs_casper150 Messages postés 11 Date d'inscription mercredi 23 août 2006 Statut Membre Dernière intervention 25 juillet 2012
14 juil. 2010 à 21:36
Re,

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