Entwickler-Ecke

Dateizugriff - string aus der registry löschen


hibbert - Mo 30.09.02 17:11
Titel: string aus der registry löschen
hallo,
jetzt habe ich endlich den code, um dateien in den autostart der registry zu packen, aber wie lösche ich diese wieder aus dem autostart der registry (nicht manuell, sondern über einen delphi befehl !)
Danke
mfg hibbert !


Klabautermann - Mo 30.09.02 18:25

Hallo,

schau dir mal
tRegestry.DeleteKey
und
tRegestry.DeleteValue
in der Online-Hilfe an.

Das sollte dir helfen.

Gruß
Klabautermann


LCS - Mo 30.09.02 18:27

Hi
TRegistry verfügt über die Methoden DeleteValue um einen einzelnen Wert des aktuell geöffneten Keys zu löschen und DeleteKey um einen ganzen Schlüssel mit all seinen Werten zu löschen.

Gruss Lothar


hibbert - Mo 30.09.02 20:56

danke, aber trozdem noch 2 fragen:
1. wo finde ich eigendlich die onlinehilfe
2. kannst du mir vielleicht ein beispiel geben?

DANKE !
mfg hibbert


Delete - Mo 30.09.02 21:34

Zitat:
wo finde ich eigendlich die onlinehilfe

Tja, Onlinehilfe ist eigentlich irreführend. Damit ist in den meisten Fällen die normale Hilfe von Delphi gemeint. Warum die nun online genannt wird? Wahrscheinlich weil´s kein Handbuch ist, das man offline lesen kann.

Im Zeitalter des Web aber -wie gesagt!- irreführend, und ich habe schon darauf gewartet, dass irgendwer mal fragt, was die Onlinehilfe ist. :mrgreen: Danke, hibbert.

Aber im Ernst -
F1!

Zitat:
kannst du mir vielleicht ein beispiel geben?

Wozu? Es sind welche in der Hilfe drin. :)


hibbert - Di 01.10.02 15:22

ja schon, aber dieses beispiel funzt bei mir nicht, wie es soll!
delphi startet zwar das Programm, aber es wird kein eintrag aus der registry gelöscht !!
mfg hibbert

ps. Bitteschön !! :mrgreen:


Delete - Di 01.10.02 17:25

Welches OS, welcher Root-Key?


hibbert - Di 01.10.02 17:39

ich weiß leider nicht was du genau meinst ?? :oops:
aber ich möchte gerne einen eintrag aus dem autostart teil der registry entfernen. (ein einfacher code wie z.B.memo1.lines.loadfromfile('deine *txt datei) würdfe mir ja schon reichen !!) verstehste was ich meine, ich hoffe es !!
wenn nicht, dann schicken einfach irgend ein code, der was aus der registry entfernt, sodass ich diesen nur noch ändern muss !
jetzt schonmal DANKE !!

mfg hibbert


Delete - Di 01.10.02 18:42

Ich will das Betriebssystem wissen und wo du was löschen willst!

Unter Windows 2000 und höher dürftest du unter HKLM als nicht Admin keine Chancen haben.

Und wie wäre es, wenn du uns mal deinen Code zeigst, der angeblich nicht funktioniert.


hibbert - Di 01.10.02 21:38

achsooo :lol: also ich habe win xp !!
und der code den ich benutzt habe ist eigendlich der aus der hilfe, aber für dich, hier ist er nocheinmal:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
uses registry;

procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
  Val:TStringList;
  I:Integer;
begin
  Reg:=TRegistry.Create;
  try
    Val:=TStringList.Create;
    try
      Reg.RootKey:=HKEY_LOCAL_MACHINE; // Section to look for within the registry
      if not Reg.OpenKey(Edit1.Text,False) then
        ShowMessage('Error opening key')
      else
      begin
        Reg.GetValueNames(Val);

        for I:=0 to Val.Count-1 do
        begin
          ShowMessage(Edit1.Text + Chr(13) +
                      'has an Entry Called '+Val.Strings[I]+Chr(13)+
                      'With a Value of '+Reg.ReadString(Val.Strings[I]));
        end;
        if MessageDlg('Ok to delete the key and lose all these values?'
                     ,Mtinformation,[mbYes,mbNo],0)=mryes then
           Reg.DeleteKey(Edit1.Text);

      end;
    finally
      Val.Free;
    end;
  finally
    Reg.Free;
  end;
end;
end.

so, versuche es dann jetzt noch mal in ruhe, wenn es klappt, war es nur mal wieder ein dummer anfängerfehler, aber wenn nicht, muss mir einer von euch helfen !
DANKE
mfg hibbert


Delete - Di 01.10.02 21:41

Hast du Admin-Rechte?


hibbert - Mi 02.10.02 16:05

jepp !! :D


Delete - Mi 02.10.02 20:48

Da hat Borland Mist gebaut. Wenn du den Schlüssel vorher schließt, dann geht´s:

Quelltext
1:
2:
3:
4:
5:
Reg.CloseKey;

if MessageDlg('Ok to delete the key and lose all these values?'
  ,Mtinformation,[mbYes,mbNo],0)=mryes then
  Reg.DeleteKey(Edit1.Text);


hibbert - Mi 02.10.02 23:25
Titel: [b]Danke[/b]
danke, aber löscht dieser befehl nicht alle 'adteien' im schlüssel? wenn ja, wie geht das, dass ich dann nur einen bestimmten lösche??
aber bis jetzt: VIELEN DANK !!


Delete - Do 03.10.02 08:48

Ja, aber das liegt doch auf der Hand, wenn du dir deinen Beispielcode mal anschaust:

Quelltext
1:
'Ok to delete the key and lose all these values?'                    

Wenn du nur bestimmte Werte aus einem Schlüssel löschen willst, dann schau dir in der Hilfe mal

Quelltext
1:
Reg.DeleteValue                    

an.


hibbert - Do 03.10.02 10:49

Dankeschön !
aber ich finde das alles ziemlich kompliziert ! außerdem soll der user nicht gefragt werden, ob der string in der registry gelöscht werden soll, dass programm soll einfach den zuvor gespeicherten string wieder löschen ! (aus dem autostart teil). Also, vielleicht kann man ja noch eine gemeinsame lösung finden !! (aber vorher habe ich jetzt noch 2 wochen ferien !!) :D
mfg hibbert


Delete - Do 03.10.02 15:57

hibbert hat folgendes geschrieben:
aber ich finde das alles ziemlich kompliziert!

Ist es aber nicht ... oder es kommt mir nur einfach vor.

Zitat:
außerdem soll der user nicht gefragt werden, ob der string in der registry gelöscht werden soll, dass programm soll einfach den zuvor gespeicherten string wieder löschen

Na ja, dann lass einfach die Abfrage mit dem "MessageDlg" weg. Stattdessen prüfst du vor dem Löschen, ob der Wert überhaupt existiert (ValueExists), und wenn das der Fall ist, dann löscht du ihn.

Zitat:
Also, vielleicht kann man ja noch eine gemeinsame lösung finden

Gerade geschehen ... :wink:


patrick - So 13.10.02 16:50

also wenn du doch wieder auf die idee mit dem key löschen kommst pass auf das es dir nicht so wie mir passiert
zum beitrag [http://auq.de/viewtopic.php?t=3019]