27. december 2003 - 16:42Der er
9 kommentarer og 1 løsning
2spm Hvordan finder jeg alt i registry
1.Kan godt finde ud af en enkel streng 1.1Hvordan finder jeg alle strengene i "Run" i registry 1.2 Hvordan finder jeg ud af ALLE procces der kører? ligsom CTRL-ALT-DELETE
procedure TForm1.Button1Click(Sender: TObject); var Registry: TRegistry; begin Registry := TRegistry.Create; Registry.RootKey:=HKEY_LOCAL_MACHINE; If registry.OpenKey('Software/Microsoft/Windows/CurrentVersion/Run',true) then begin Edit1.Text := Registry.ReadString('Test'); Registry.Free; end; end;
Hvorfor kommer der ikke noget tekst i edit1.text :S
(* Baxos' OpenKey er kaldt med true, hvilket opretter nøglen hvis den ikke findes; dette er forkert.
Brug OpenKeyReadOnly til opslag. Det er sikkert en indkapsling af OpenKey('',false), men er meget læseligt.
Igen vil jeg promovere lidt for brugen af try-finally blokke. Jeg plejer at lave konstruktionen således:
with TRegistry.Create do try if OpenKeyReadOnly('Software\...') then if ValueExists('test') then Edit1.Text := ReadString('test'); finally Free; end; // try
... men det er ikke det du spørger efter. Prøv nedenstående og hvis du ikke har en TValueListEditor komponent så kan du bruge en TStringGrid eller et TListView *)
procedure TfrnMain.btnTestClick(Sender: TObject); var i : integer; Reg : TRegistry; ValueName : string; ValueNames : TStringList; begin ValueNames := TStringList.Create; Reg := TRegistry.Create; try
vleData.Strings.Clear; // A TValueListEditor component
if Reg.OpenKeyReadOnly(ePath.Text) then begin Reg.GetValueNames(ValueNames);
for i := 0 to ValueNames.Count - 1 do begin ValueName := ValueNames[i]; case Reg.GetDataType(ValueName) of rdUnknown : vleData.InsertRow(ValueName,'unknown',true); rdString : vleData.InsertRow(ValueName, Reg.ReadString(ValueName),true); rdExpandString : vleData.InsertRow(ValueName,'ExpandString',true); rdInteger : vleData.InsertRow(ValueName, IntToStr(Reg.ReadInteger(ValueName)),true); rdBinary : vleData.InsertRow(ValueName, format('Size: %d', [Reg.GetDataSize(ValueName)]),true); end; // case end; // for
end; // if finally Reg.Free; ValueNames.Free; end; // try
// Assigning to the ValueNames.Values[ValueName] afterwards won't // work - I've tried.
Lige en afsluttende kommentar som jeg ikke fik gjort nok opmærksom på. Jeg får listen af value-navne smidt ind i listen. Efterfølgende kan jeg ikke fylde værdierne ind i TStringList'ens value-del. Det havde ellers set pænere ud (måske konverteres syntaksen navn=værdi til en enkelt array hvor de lige pladser er navnene og de ulige værdierne - men det er bare en antagelse)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.