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
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.