Announcement

Collapse
No announcement yet.

Registry

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Registry

    Wie kann ich mit Admin-Recht die Registry-Einträge der einzelnen User (HKEY_Current_User) lesen, schreiben, löschen?<br>
    Dietmar

  • #2
    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

    Comment


    • #3
      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

      Comment


      • #4
        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

        Comment


        • #5
          Einen ganzen Schlüssel zu löschen, das funktioniert. Aber wie lösche ich einen Eintrag?<br>
          <br>
          Dietma

          Comment


          • #6
            Funktioniert das unter Delphi 5 auch nicht

            Comment


            • #7
              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&gt

              Comment


              • #8
                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

                Comment


                • #9
                  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

                  Comment


                  • #10
                    Vielen Dank Andreas<br>
                    <br>
                    Sowas blödes:<br>
                    <PRE>
                    if pos('test', Val[i]) = 1 then
                    DeleteValue(Val[i]); // So ist es richtig!
                    </PRE>
                    <br>
                    Dietma

                    Comment


                    • #11
                      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

                      Working...
                      X