Delphi-PRAXiS

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

p80286 14. Okt 2011 15:32

AW: Registry Wert dauerhaft löschen
 
Ich meine mich zu erinnern, daß einige Teile der Registry nur gespiegelt sind, weiß aber nicht ob das speziell für diese gilt.
Ggf. müßtest Du mal unter HKey_local_Machine nachschauen.

Gruß
K-H

Luckie 14. Okt 2011 19:26

AW: Registry Wert dauerhaft löschen
 
Hm, aber sind diese Einträge nicht benutzerspezifisch?

jfheins 14. Okt 2011 19:55

AW: Registry Wert dauerhaft löschen
 
ich verweise mal auf Google :mrgreen:
"context menu new" liefert an zweiter Stelle folgendes: http://www.howtogeek.com/howto/20813...r-open-faster/

Das Progamm sieht schon sehr nach dem aus, was du gerade möchtest. Die Anleitung wie man den Aktenordner noch wegbekommt ist dann auch die Lösung für deine wiederkehrenden Einträge: Das was du da entfernst ist wohl nur ein Cache, die eigentliche Information scheint in HKEY_CLASSES_ROOT zu stecken. Zu jeder Datei die man dort "Neu" anlegen kann, existiert ein ShellNew Schlüssel. Wie (oder ob) das jetzt nach Benutzern differenziert wird, konnte ich jetzt nicht herausfinden. HKEY_CLASSES_ROOT ist auf jeden Fall Global, ggf. mal das Programm mit RegMon analysieren...

Ich hoffe das hat geholfen ;-)

Luckie 14. Okt 2011 19:57

AW: Registry Wert dauerhaft löschen
 
Ich habe gegoogelt, allerdings nur nach dem Registry Eintrag. Und genau so ein schlankes Programm wollte ich mir selber machen. Ich gucke es mir aber mal an. Danke für den Hinweis.

Luckie 18. Okt 2011 13:38

AW: Registry Wert dauerhaft löschen
 
Ich glaube, es war doch ein Reboot nötig. Eventuell reicht auch nur ein Ab- und wieder Anmelden. Denn jetzt sind die Einträge irgendwie dauerhaft gelöscht. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.

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