Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Anderes Problem:<br>
Ich möchte Einträge in der Registry mit DeleteValue löschen bei denen der Text "test" vorkommt.<br>
DeleteValue will aber nicht, warum ?<br>
Ich habe volle Admin-Rechte.
<br>
<PRE>
// Registry säubern
with TRegistry.Create do begin
// with TRegistry.Create(KEY_WRITE) do begin bringt auch nichts
if OpenKey('software\borland\locales', false) then begin
Val:= TStringList.Create;
GetValueNames(Val);
for i:= 0 to Val.Count-1 do begin
s:= Val.Strings[i];
if pos('test', Val.Strings[i]) = 1 then begin
DeleteValue(Val.Strings[i])); // Ist immer false :-(
// Alternativ mit API: r:= RegDeleteValue(CurrentKey, 'test'); // Errorcode 5 wird zurückgegeben
end;
end;
Val.Free;
CloseKey;
end;
Free;
end;
<\PRE>
<br>
Dietma
Moin Dietmar,<br>
<br>
statt<br>
<br>
with TRegistry.Create(KEY_WRITE) do<br>
<br>
probiers mal mit<br>
<br>
with TRegistry.Create do<br>
<br>
KEY_WRITE umfasst u.U. nicht das Recht zu löschen.<br>
<br>
Ciao<br>
Chri
Hallo Christian,<br>
"with TRegistry.Create do" habe ich doch schon probiert.<br>
Meine Routine funktioniert übrigendns unter NT 4, NT 2000 und XP nicht :-(<br>
Dietma
Hallo Dietmar,<br>
kann es sein, dass Du nach dem Namen des Eintrags suchst und nicht nach dem Wert ??<br>
<pre>
with TRegistry.Create do begin
if OpenKey('software\borland\locales', false) then begin
Val:= TStringList.Create;
GetValueNames(Val);
for i := 0 to Val.Count-1 do
if pos('test', <b>ReadString(Val[i])</b>) = 1 then
DeleteValue(Val[i]);
Val.Free;
CloseKey;
end;
Free;
end;
</pre>
Das suchen ist nicht das Problem. Ich suche nach einem Eintrag und finde ihn auch.<br>
DeleteValue funktioniert nicht.<br>
DeleteKey funktioniert übrigens.<br><br>
Beispiel:<br>
In der Registry steht unter<br>
<PRE>
HKEY_CURRENT_USER<br>
|- Software<br>
|_ Borland Name | Wert<br>
|_ locales test.exe | "DEU"<br>
</PRE>
Ich möchte den Eintrag >test.exe "DEU"< komplett entfernen.
<br>
Dietma
Da bin ich ja sprachlos :-)
Erstelle doch mal einfach zwei Buttons mit folgendem Code:
<pre>
procedure TForm1.btnCreateClick(Sender: TObject);
const
key = 'Software\test';
var
i : Integer;
begin
// Testeinträge erstellen
With TRegistry.Create do begin
if OpenKey(key, true) then begin
for i := 1 to 10 do
WriteString(Format('name%d', [i]), Format('value%d', [i]));
CloseKey;
end;
Free;
end;
end;
procedure TForm1.btnDeleteClick(Sender: TObject);
const
key = 'Software\test';
var
val : TStringList;
i : Integer;
begin
// -- Einen Eintrag entfernen
with TRegistry.Create do begin
if OpenKey(key, false) then begin
Val:= TStringList.Create;
GetValueNames(Val);
for i := 0 to Val.Count-1 do
if pos('value3', ReadString(Val[i])) = 1 then
DeleteValue(Val[i]);
Val.Free;
CloseKey;
end;
Free;
end;
end;
</pre>
Wird der Eintrag 'value3' bei Dir entfernt ??<br>
Gruß<br>
Andrea
Das war es nicht alleine, ich hatte diese Variante bestimmt auch schon durchprobiert.<br>
<br>
Folgend ein Beispiel wie es <B>nicht</B> funktioniert:
<PRE>
// Registry säubern
with TRegistry.Create do begin
// unter HKEY_LOCAL_MACHINE
RootKey:= HKEY_LOCAL_MACHINE;
if OpenKey('software\borland\locales', false) then begin
Val:= TStringList.Create;
GetValueNames(Val);
for i:= 0 to Val.Count-1 do begin
if pos('test', Val[i]) = 1 then
DeleteValue(Val[i]);
end;
Val.Free;
CloseKey;
end;
// unter HKEY_CURRENT_USER
RootKey:= HKEY_CURRENT_USER; // !!!
if OpenKey('software\borland\locales', false) then begin
Val:= TStringList.Create;
GetValueNames(Val);
for i:= 0 to Val.Count-1 do begin
s:= Val.Strings[i];
if pos('test', Val[i]) = 1 then begin
DeleteValue(Val[i]);
end;
end;
Val.Free;
CloseKey;
end;
Free;
end;
<br>
<B>Und so funkts:</B>
// Registry säubern
with TRegistry.Create do begin
// Borland/locales
// unter HKEY_LOCAL_MACHINE
RootKey:= HKEY_LOCAL_MACHINE;
if OpenKey('software\borland\locales', false) then begin
Val:= TStringList.Create;
GetValueNames(Val);
for i:= 0 to Val.Count-1 do begin
if pos('test', Val[i]) = 1 then
DeleteValue(Val[i]);
end;
Val.Free;
CloseKey;
end;
free // !!!
end;
with TRegistry.Create do begin // !!!
// unter HKEY_CURRENT_USER
if OpenKey('software\borland\locales', false) then begin
Val:= TStringList.Create;
GetValueNames(Val);
for i:= 0 to Val.Count-1 do begin
s:= Val.Strings[i];
if pos('test', Val[i]) = 1 then begin
DeleteValue(Val[i]);
end;
end;
Val.Free;
CloseKey;
end;
Free;
end;
</PRE>
Schönen Feierabend wünscht<br>
Dietma
Comment