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]
0
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é....
0
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]
0
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
0

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]
0
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]
0
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
0
Rejoignez-nous