Entwickler-Ecke

Sonstiges (Delphi) - registrierung neuer schlüssel in autostart schreiben


lippi - Sa 18.01.03 16:41
Titel: registrierung neuer schlüssel in autostart schreiben
hi, ich sollte unter winNT ein programm in den autostart der regedit einfügen.

uses registry;
das weiss ich schon mal...

jedoch wie ich da was eintrage und wie ich den autostart ordner finde. kann mir einer helfen??

thx im voraus. mfg lippi


Aya - Sa 18.01.03 19:00

Hi,

so:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure AddToAutostart(Name, File: String);
var
  REG: TRegistry;
begin
  REG:=TRegistry.Create;
  REG.RootKey:=HKEY_CURRENT_USER; //bzw HKEY_LOCAL_MACHINE für alle User!
  REG.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run\',true);
  REG.WriteString(Name,File);
  REG.CloseKey;
  REG.Free;
end;


Aufrufen kannst du es dann z.B. so:

Quelltext
1:
AddToAutostart('Mein Programm',Application.ExeName);                    


Au'revoir,
Aya~


Delete - Sa 18.01.03 22:29

Aya hat folgendes geschrieben:
so:

Nee, so nicht. :wink: So:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
REG:=TRegistry.Create;

with REG do try
  RootKey := HKEY_CURRENT_USER;

  if(OpenKey('Software\Microsoft\Windows\CurrentVersion\Run\',
    true)) then
  begin
    WriteString(Name,File);
    CloseKey;
  end;
finally
  Free;
end;

Und HKEY_LOCAL_MACHINE kann man nur nehmen, wenn man Admin-Rechte hat. Sonst wird´s nichts mit dem Reinschreiben. Mit der Suchfunktion lässt sich eine passende Funktion übrigens finden - um der Frage vorzubeugen:

"Wie kriege ich heraus, ob ich Admin-Rechte habe?"


Aya - Sa 18.01.03 22:33

mh... und, was ist jetzt an deiner funktion anders als an meiner??? :roll:

Mal davon abgesehen das bei dir die Zeile:

Quelltext
1:
if(OpenKey('Software\Microsoft\Windows\CurrentVersion\Run\',true)) then                    

ziemlich sinnlos ist, da sie IMMER true sein wird... :)
Denn durch das "true" im aufruf OpenKey sagst du das das verzeichniss erstellt werden soll, sofern es nicht existiert...

sollte es ein schreibfehler sein und es sollte false dastehen, bedenkst du eine wichige sache nicht... es kann zwar sein das der Ordner nicht existiert, er ist jedoch IMMER an dieser stelle... und, soll etwa nur weil der Ordner nicht existiert kein Autostart erstellt werden...? Wäre doch doof, oder? :)

Au'revoir,
Aya~


Delete - Sa 18.01.03 22:39

Aya hat folgendes geschrieben:
Mal davon abgesehen das bei dir die Zeile ... ziemlich sinnlos ist, da sie IMMER true sein wird... :)

Glaube ich nicht, denn ...
Zitat:
Denn durch das "true" im aufruf OpenKey sagst du das das verzeichniss erstellt werden soll, sofern es nicht existiert...

Und wenn das aus irgendeinem Grund nicht klappt?

Außerdem fehlt in deinem Code das IMHO wichtige

Quelltext
1:
2:
3:
try
finally
end;

als Schutz, um z.B. auch Fehler beim Erzeugen des Eintrags abzufangen. Probier das Beispiel doch einfach mal aus: mit eingeschränkten Rechten unter Win NT/2000/XP und dem Schlüssel HKEY_LOCAL_MACHINE.

Dann wirst du wissen, wo die Unterschiede liegen.


lippi - So 19.01.03 13:58

vielen dank für eure schnelle und sehr hilfreiche hilfe!!!

dieses board ist echt genial!!!


thx lippi


Trallewatsch - Sa 08.02.03 10:34
Titel: Eintrag in Autostart
Hallo,

bei mir mit XP klappt das nicht. In der Registrierung ist zwar mein gewünschter Eintrag drin, aber nicht wirksam. Im Menü Startknopf/Alle Programme/Autostart ist es jedoch nicht enthalten.

Habe HKEY_LOCAL_MACHINE und auch HKEY_CURRENT_USER probiert.


Delete - Sa 08.02.03 11:37

Programme, die in den Run-Schlüsseln der Registry stehen, erscheinen nicht im Autostart-Ordner. Soll dein Programm im Autostart-Ordner des Startmenüs erscheinen, mußt du ein Link im Autostart-Ordner des entsprechenden Benutzers anlegen.