Registrierungs Autorun nutzen

Erklärung
In der Registrierung gibt es einen Key, in dem man Programmpfade schreiben kann, diese werden beim Windowsstart gestartet.
Über TRegistry.GetValueNames(StrList) werden alle Werte des Keys in der Variable StrList, mit Datentyp TStringlist, gepeichert. Jetzt wenn man die Namen hat ist es ein Leichtes die dazugehörigen Werte herauszufinden. Ebenso leicht ist das Hinzufügen und Löschen von den Werten. Die Funktionen können einfach in das eigene Programm kopiert werden...

Quelltext
Wichtig: in die Uses-Klausel REGISTRY aufnehmen
  uses Registry;

function Akt:boolean;
var R : TRegistry;
     Strlist : TStringlist;
     i : integer;
     Name, Pfad : string;

 Begin
  result := true;
  try
   R := TRegistry.create;
   //Der Autorun ist auch in HKEY_CURRENT_USER
   R.RootKey := HKEY_LOCAL_MACHINE;
   R.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);

   //StrList initialisieren
   StrList := TStringlist.Create;

   //Alle Werte extrahieren
   R.GetValueNames(StrList);

   //Die Werte in die StringGrid1 eintragen
for i:= 0 to StrList.Count -1 do Begin
    Form1.StringGrid1.RowCount := i+1;
    Name := StrList.Strings[i];
    Pfad := R.ReadString(Name);
    Form1.StringGrid1.Cells[0,i] := Name;
    Form1.StringGrid1.Cells[1,i] := Pfad;
  end;

  R.free;
  except result := false end;
end;

function del:boolean;
var R:Tregistry;

Begin
result := true;
try
R:= Tregistry.Create;
R.RootKey := HKEY_LOCAL_MACHINE;
R.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);
R.DeleteValue(Form1.Stringgrid1.Cells[0,Form1.Stringgrid1.Row]);
Akt;
except result := false end;
end;

function add:boolean;
var InP : String;
      R : TRegistry;

Begin
result := true;
try
if InputQuery('Einfügen', 'Namen für den neuen Wert eingeben', InP) then Begin
  Form1.OpenDialog1.Title := 'Pfad für ' + InP + ' eingeben';
  if Form1.OpenDialog1.Execute then Begin
   R := Tregistry.Create;
   R.RootKey := HKEY_LOCAL_MACHINE;
   R.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);
   R.WriteString(Inp,Form1.OpenDialog1.FileName);
   R.closeKey;
   R.free;
   Akt;
  end;
end;
except result := false end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  akt;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if application.MessageBox(Pchar('Soll der Wert ' +
  Form1.Stringgrid1.cells[0,Form1.Stringgrid1.Row] + 
  ' wirklich gelöscht werden ?'),'Bestätigung',52) = 6 then del;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  add;
end;