Autor Beitrag
del1312
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Di 03.06.03 18:14 
Hi hab mal wieder ein Prob :oops:

Beim Form.Create kommt unteranderem folgender Code der aus der Registry einen Wert lesen soll. Allerdings kommt ne Fehlermeldung weil der Wert wohl noch nicht existiert. Hab versucht das mit try und exept abzufangen, aber es funzt nicht. Kommt immer noch :"Fehler beim holen der Daten aus Autosave" Sollte er eigentlich nicht dann den Wert lesen(entspricht Autosave) auf 1 eintragen?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  regist:=TRegistry.Create;
  regist.RootKey:=HKEY_LOCAL_MACHINE;
  try
  regist.OpenKey('SOFTWARE\ECSpooky\Test\Version1.2', true);
  lesen:=regist.ReadInteger('Autosave');
  except
  lesen:=1;
  end
  regist.Free;


Danke für Eure Hilfe!!!
mfg
ecspooky

Moderiert von user profile iconTino: Code- durch Delphi-Tag ersetzt. Titel geändert.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 03.06.03 18:21 
Ich schlage folgende Korrektur vor, die ein paar kleinere Problemchen behebt:
ausblenden Delphi-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:
// Standardwert festlegen
lesen := 1;

// Registry nur lesen öffnen
// (bitte an NT-Systeme und mangelnde
// Benutzerrechte unter HKLM denken!)
regist:=TRegistry.Create(KEY_READ);
try
  // Root, wie gesagt: HKLM
  regist.RootKey:=HKEY_LOCAL_MACHINE;

  // "OpenKey" ist eine Funktion!
  // da du einen Wert auslesen willst, der
  // da sein SOLLTE/MUSS, bringt das
  // Erzeugen des Schlüssels mit TRUE
  // auch nicht viel, wenn er noch nicht
  // existiert
  if regist.OpenKey('SOFTWARE\ECSpooky\Test\Version1.2',false) then
  begin
    lesen:=regist.ReadInteger('Autosave');

    // Schlüssel schließen
    regist.CloseKey;
  end;
finally
  regist.free;
end;
del1312 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Di 03.06.03 18:27 
Oh man vielen vielen Dank für die schnelle und supi erklärten Hilfe!!! :D
Klappt wunderbar, also nochmal DANKE!

Hab noch ne Frage: Wie lösche ich dann wieder die Schüssel ?

mfg
ecspooky
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 03.06.03 18:56 
Löschen machst du mit DeleteKey. Und bei dir wäre auch hilfreich gewesen, wenn du einfach erst dann ausliest, wenn:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Regist:=TRegistry.Create;
Regist.RootKey:=HKEY_LOCAL_MACHINE;
Regist.OpenKey('Software\ECSpooky\Test\Version1.2', True);
If Regist.ValueExists('Autosave'Then
Begin
Try
Lesen:=Regist.ReadInteger('Autosave');
Except
Lesen:=1;
End;
Regist.Free;


.. du es mit einer ValueExists-Abfrage gemacht hättest. :)

_________________
Hasta La Victoria Siempre
del1312 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Di 03.06.03 19:07 
Hm aber die Variante darüber ist auch ok oder? Die läuft ja super.

Wegen dem löschen, ist das so ok?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
// AutoStart aus Registry löschen ENDE
regist:=TRegistry.Create;
     try
      regist.RootKey:=HKEY_LOCAL_MACHINE
      regist.DeleteKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MeinProgramm');
     finally
     regist.Free;
     end;
 // AutoStart aus Registry löschen ENDE
    end;


Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 03.06.03 20:04 
ausblenden Delphi-Quelltext
1:
2:
Regist.RootKey:=HKEY_LOCAL_MACHINE; 
Regist.OpenKey('Software\ECSpooky\Test\Version1.2', True);

So und wenn du das alles geschaft hast, dann speicherst du bitte deine Programmeinstellungen in HKCU und nicht HKLM, dann klappt das auch mit dem Schreiben als nicht Admin. :roll:
del1312 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Mi 04.06.03 01:06 
Ok das mit HKCU und nicht HKLM ist klar ;o) Nur wie lösche ich jetzt meinen angelegte Zeichenfolge bzw Schlüssel?
Damit klappt es nicht:
ausblenden Quelltext
1:
regist.DeleteKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run\MeinProg');					
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.06.03 08:20 
Ich nehme mal an, dass
ausblenden Quelltext
1:
SOFTWARE\Microsoft\Windows\CurrentVersion\Run					

der Schlüssel und
ausblenden Quelltext
1:
MeinProg					

der Eintrag (= Value) deines Programms ist. Meinst du, dass man letzteren dann mit DeleteKey entfernen kann? Oder glaubst du, man sollte lieber den Schlüssel öffnen und dann den Eintrag daraus entfernen? :wink:
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Mi 04.06.03 13:52 
@Mathias: Schon gut, ich gebe mich geschlagen. Vielleicht sollte ich aufmerksamer lesen, dann wäre DeleteKey nicht als Vorschlag rausgekommen, sondern eben die andere Variante zum Löschen von Values. :oops:

_________________
Hasta La Victoria Siempre
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.06.03 15:01 
Du musst dich nicht entschuldigen. ecspooky hat ja gefragt:
Zitat:
Wie lösche ich dann wieder die Schüssel ?

Unter dem Gesichtspunkt war deine Antwort völlig korrekt, und ich hätte die selbe gegeben. Nur stellte sich dann ja später raus, dass er versucht, den Eintrag seines Programms zu entfernen. Zu dem Zeitpunkt hatte ich also einfach nur mehr Informationen als du einen Tag zuvor. :)

Also, nix für ungut. Meine Kritik richtete sich übrigens auch nicht gegen dich sondern gegen ecspooky, der Schlüssel und Einträge durcheinander bringt.
del1312 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Mi 04.06.03 18:19 
also ich fühl mich auch nicht als müßte ich mich entschuldigen oder schämen. ich weiss es halt nicht und deshalb frag ich ja hier :D


Also ich hab in das RegVZ:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\');

ne neue Zeichenfolge mit dem Wert z.B 'C:\Test.exe' Diese möchte ich nun löschen. Kannst du mir da bitte weiterhelfen?

mfg
ecspooky
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.06.03 20:01 
Ich habe nicht gesagt, dass du dich schämen oder entschuldigen sollst. Du solltest nur deine Fragen von Anfang an verständlich formulieren. Lieber beim Posten Zeit lassen und noch mal Korrektur lesen als irgendwelchen Unsinn hinschmieren, der dann zu Missverständnissen und falschen Antworten führt.

Rein prinzipiell hast du alle Lösungsschritte bereits in den hier vorhandenen Postings drin -

Du weißt wie man einen Registry-Schlüssel öffnet, denn sonst könntest du mit deinem Programm überhaupt keine neue Zeichenfolge anlegen. Das wäre Schritt #1: den gewünschten Schlüssel öffnen.

Dann solltest du den Tipp von Terra23 beherzigen und mit ValueExists prüfen, ob deine Zeichenfolge überhaupt vorhanden ist. Dabei handelt es sich um eine Bool-Funktion, die TRUE oder FALSE zurückliefert.

Ist das Ergebnis TRUE, dann existiert der Eintrag, und du kannst ihn löschen. Und weil es ein Eintrag (= Value) ist, geht das nicht mit DeleteKey ... sondern logischerweise mit DeleteValue.

Gruß.
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Mi 04.06.03 21:29 
@Mathias: Eines muß ich klar stellen, schnell. Ich fühle mich überhaupt nicht von dir kritisiert und erst Recht nicht angegriffen. Das ist halt so der große Negativ-Punkt, wenn man nicht weiß, wie der andere so spricht. Vielleicht sollte ich ein :mrgreen: dahinter machen. :rofl: Das war nicht böse gemeint, sondern einfach nur als Gag, nach dem Motto: Asche auf mein Haupt. ;-)

_________________
Hasta La Victoria Siempre