Newsgroup: it.comp.lang.delphi
Titolo: registry

Buondě a tutto l'NG
Sto scrivendo un semplice programmino che deve leggere alcune chiavi e 
valori dal registro, la unit registry fa quasi tutto quello che voglio.
Vorrei sapere se esiste (e io non l'ho trovata) un metodo che scanna un 
key e mi restituisce tutti i valori in modo ricursivo quindi se ci sono 
sottochiavi eccc.
Grazie a tutti
Ciao Paolo
--
pbonfanti2@*NOSPAM*
inwind.it
Togliere dall'indirizzo *NOSPAM*
Vuoi saperne di piů su python clicca 
http://www.pyj.it

 quindi se ci sono sottochiavi eccc.
Scanna? Poraccia...
Secondo link cercando GetKeyNames recursive su googlegroups e la funzione
l'č bell'e pronta...
--
Jax
====
Si paga caro l'acquisto della potenza; la potenza instupidisce.
(Nietzsche)

 Jax


 E' vero grazie io avevo cercato solo in questo gruppo
Va beh che siamo dei geni, ma mica siamo onniscienti ;)
--
Jax
====
"Ritengo che il cinema sia destinato a rivoluzionare il nostro sistema
scolastico e che in pochi anni soppianterà in gran parte, se non del tutto,
l'uso del libro di testo."
Thomas Edison, 1922

 l'č bell'e pronta...
(Quasi), scusa ma non mi torna una cosa lui la dichiare cosě:
procedure ReadReg(const Root: HKEY; const Key: String; const 
List:TStrings);
Poi la richiama cosě alla creazione della form:
ReadReg(HKEY_CURRENT_USER, 'Software\Microsoft', Memo1.Lines);
e la procedura č definita cosě:
procedure Read(const Key: String);
La cosa che non mi torna č che la definisce con ReadReg(vari par) e la 
implementa con Read(1 par) perchč infatti il compilatore mi dice che la 
procedura Read non esiste
Come la aggiusto il tutto?


 Come la aggiusto il tutto?
Uhm, evidentemente č sbagliata: comunque mi era sfuggito che nel post diceva
che con questa procedura c'era qualcosa che non gli andava bene.
Prova con quest'altra, se non ti va oggi mi metto lě e vedo se ce ho
qualcosa del genere perso in qualche pas ;)
enumerating registry keys:
procedure TForm1.Button1Click(Sender: TObject);
  Var
    indent: Integer;
  Procedure EnumAllKeys( hkey: THandle );
  var
    l: TStringList;
    n: Integer;
  Begin
   Inc(indent, 2);
   With Tregistry.Create Do
   try
     RootKey := hkey;
     OpenKey( EmptyStr, false );
     l := TStringLIst.Create;
     try
       GetKeynames(l);
       CloseKey;
       For n:= 0 To l.Count-1 Do Begin
         memo1.lines.add( StringOfChar(' ',indent)+l[n] );
         If OpenKey( l[n], false ) Then Begin
           EnumAllKeys( CurrentKey );
           CloseKey;
         End;
       End;
     finally
       l.Free
     end;
   finally
     Free;
   end;
   Dec(indent, 2);
  End;
begin
  Memo1.Clear;
  memo1.lines.add('Keys under HKEY_CURRENT_USER');
  indent := 0;
  EnumAllKEys( HKEY_CURRENT_USER );
end;
--
Jax
====
Posso simpatizzare con qualsiasi cosa, tranne che con la sofferenza.
(Wilde)

 Jax


 possibile?
Prova a mettere al posto di
OpenKey( EmptyStr, false );
questo
OpenKey('Hardware', false);
--
Jax
====
La vita è quello che succede mentre tu stai facendo altri progetti .

 OpenKey('Hardware', false);
No, scusami, stronzata. La fretta com'è bastarda...
Oggi ci guardo bene, promesso.
--
Jax
====
Il mondo non morirà mai di fame per la mancanza di meraviglie, quanto
per la mancanza di meraviglia. (Gilbert Keith Chesterton)

 Oggi ci guardo bene, promesso.
Perň rimane il fatto che non so quante e quali chiavi/valori ci sono il un 
folder.
Grazie sempre di tutto


> possibile?
Così sembra funzionare, un'unica attenzione: quando specifichi la Key da cui
partire (es. software) devi specificarla sempre con la \ davanti, es.:
\Software\Microsoft.
Procedure TForm1.EnumAllKeys(hRootKey: THandle; sBaseKey: String);
var
  rReg: TRegistry;
  iIndent: Integer;
  procedure RecurseKey(sKey: String);
  var
    l: TStringList;
    n: Integer;
  begin
    Inc(iIndent, 3);
    if rReg.OpenKey(sKey, False) then
    begin
      l := TStringList.Create;
      try
        rReg.GetKeyNames(l);
        for n := 0 to l.Count - 1 do
        begin
          Memo1.Lines.Add(StringOfChar(' ', iIndent) + l[n]);
          RecurseKey(sKey + '\' + l[n]);
          rReg.CloseKey;
        end;
        finally l.Free;
      end;
    end;
    Dec(iIndent, 3);
  end;
begin
  Memo1.Clear;
  rReg := TRegistry.Create;
  try
    iIndent := 0;
    rReg.RootKey := hRootKey;
    RecurseKey(sBaseKey);
   finally rReg.Free;
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  EnumAllKeys(HKEY_CURRENT_USER, Edit1.Text);
end;
--
Jax
====
Chi troppo vuole, qualcosa stringe.

 il un folder.
Scusami, non ho capito...
--
Jax
====
Ci sono scemenze ben presentate come ci sono scemi ben vestiti.

 Jax
Ancora grazie di tutto Paolo
--
pbonfanti2@*NOSPAM*
inwind.it
Togliere dall'indirizzo *NOSPAM*
Vuoi saperne di più su python clicca 
http://www.pyj.it

 io dovrei avere anche una scansione di quelli
Beh, questo è facile, dai un'occhiata all'esempio della funzione
GetValueNames sull'help di delphi e ti dovrebbe essere tutto chiaro, basta
che lo ripeti per ogni chiave che ti interessa.
Ma che stai facendo, un clone del Regedit? ;)
--
Jax
====
Si chiama perseveranza quando è per una buona causa, ostinazione quando
è per una cattiva. (Laurence Sterne)

 Jax
--
pbonfanti2@*NOSPAM*
inwind.it
Togliere dall'indirizzo *NOSPAM*
Vuoi saperne di piů su python clicca 
http://www.pyj.it