Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Registry Wert dauerhaft löschen (https://www.delphipraxis.net/163765-registry-wert-dauerhaft-loeschen.html)

Luckie 14. Okt 2011 13:12

Registry Wert dauerhaft löschen
 
Ich habe hier ein etwas seltsames Phänomen. Unter dem Schlüssel HKCU\Software\Microsoft\windows\CurrentVersion\Exp lorer\Discardable\PostSetup\ShellNew findetman die Einträge vom den Kontextmenü die man sieht wenn man im Explorer mit der rechten Maustaste klickt und dann "Neu" auswählt. Wenn man dort einen Wert löscht, dann fehlt auch der zugehörige Eintrag im Kontextmenü. Öffnet man das Kontextmenü aber zum zweiten mal, ist der Eintrag in der Registry und im Menü wieder da. allerdings wollte ich die Einträge dauerhaft löschen, weil das Menü voller Einträge ist, die ich nicht brauche und man die nicht findet, die man braucht.

Ich habe mir auch schon ein kleines Programm dafür geschrieben:

Delphi-Quellcode:
uses
  Registry;

const KEY = 'Software\Microsoft\windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew';

procedure RegGetValueNames(const Key: AnsiString; Values: TStrings);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create(KEY_READ);
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey(KEY, false) then
    begin
      Reg.GetValueNames(Values);
    end
    else
      RaiseLastOSError;
  finally
    Reg.Free;
  end;
end;

procedure RegDeleteValue(const Key: AnsiString; const Value: AnsiString);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    if Reg.OpenKey(KEY, false) then
    begin
      if not Reg.DeleteValue(Value) then
        RaiseLastOSError;
    end;
  finally
    Reg.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  try
    RegGetValueNames(KEY, CheckListBox1.Items);
    for i := 0 to CheckListBox1.Count - 1 do
      CheckListBox1.Checked[i] := true;
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  try
    for i := 0 to CheckListBox1.Count - 1 do
    begin
      if not CheckListBox1.Checked[i] then
        RegDeleteValue(KEY, CheckListBox1.Items[i]);
    end;
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;
Das funktioniert auch, bis auf die Tatsache, dass Windows die gelöschten Einträge wieder erstellt. Windows muss sie sich also noch irgendwo anders merken. Nur wo? Ich habe unter HKCU nichts weiter gefunden.

himitsu 14. Okt 2011 13:20

AW: Registry Wert dauerhaft löschen
 
Hast du es mal so probiert?

- (eventuell den Explorer abschießen ... Taskmanager)
- Einträge löschen
- Windows neu starten
- weg?

Bernhard Geyer 14. Okt 2011 13:21

AW: Registry Wert dauerhaft löschen
 
Um welche Einträge geht es? Sind das evtl. Einträge von ShellExtensions? Dann solltest du diese Löschen.
Ansonsten wird wohl hier die Registry wohl nur eine Art NIL-Device darstellen.

Luckie 14. Okt 2011 13:23

AW: Registry Wert dauerhaft löschen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Windows habe ich noch nicht neu gestartet.

Im Anhang noch mal ein Screenshot von den Einträgen.

Luckie 14. Okt 2011 13:36

AW: Registry Wert dauerhaft löschen
 
Neue Erkenntnis:

Unter HKEY_USERS\S-1-5-21-1060284298-492894223-725345543-1003\Software\Microsoft\Windows\CurrentVersion\Exp lorer\Discardable\PostSetup\ShellNew gibt es die gleichen Einträge. Und dort kann ich sie auch löschen. Aber dann sind sie auch wieder da. Auch wenn ich sie in beiden Schlüsseln lösche.

DeddyH 14. Okt 2011 13:38

AW: Registry Wert dauerhaft löschen
 
In letzter Zeit mal beim Bayrischen Zoll gewesen? :mrgreen: (SCNR^^)

Bernhard Geyer 14. Okt 2011 13:43

AW: Registry Wert dauerhaft löschen
 
Zitat:

Zitat von Luckie (Beitrag 1130481)
Neue Erkenntnis:

Unter HKEY_USERS\S-1-5-21-1060284298-492894223-725345543-1003 ... gibt es die gleichen Einträge.

Das ist ja auch deine HKCU-Zweig der Registry.

Bummi 14. Okt 2011 13:45

AW: Registry Wert dauerhaft löschen
 
werde die gegf. von den Anwendungen bzw. Installer neu geschrieben?

Luckie 14. Okt 2011 14:08

AW: Registry Wert dauerhaft löschen
 
Nein, die betreffenden Anwendungen wurden nach dem Löschen nicht gestartet.

Bummi 14. Okt 2011 14:46

AW: Registry Wert dauerhaft löschen
 
Vielleicht kommst Du mit Regmon bzw. Prozess Monitor dahinter wer die Schlüssel wieder einträgt


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz