Home » Tipps & Tricks » Applikation » Sonstiges » Programme in den Autostart schreiben

Programme in den Autostart schreiben

Soll Ihr Programm automatisch mit dem Start von Windows ausgeführt werden, müssen Sie es in den Autostart schreiben. Hauptsächlich werden dazu zwei Varianten genutzt, die hier in diesem Artikel beschrieben werden.

Es gibt die Möglichkeit eine Verknüpfung im Autostart-Ordner zu erstellen. Es gibt unter Windows Konstanten, mit deren Hilfe Sie solche Systemverzeichnisse ermitteln können. Die entsprechende Konstante für den Autostart-Ordner lautet CSIDL_COMMON_STARTUP. Lesen Sie dazu in den Verweisen, wie Sie über die Konstanten letztendlich an den Pfad kommen. Ebenso befindet sich in den Verweisen ein Artikel, der erläutert, wie Sie Verknüpfungen erzeugen.
Die zweite Möglichkeit besteht darin, einen Eintrag in der Registry zu erstellen. Es gibt dort verschiedenen Orte, wo dies geschehen kann.

Unter dem Rootkey HKEY_LOCAL_MACHINE stehen folgende Schlüssel zur Verfügung, zu denen der Anwender unter NT/2k/XP evtl. nur als Administrator Zugriff hat:

SoftwareMicrosoftWindowsCurrentVersionRunServicesOnce
SoftwareMicrosoftWindowsCurrentVersionRunServices
SoftwareMicrosoftWindowsCurrentVersionRunOnce
SoftwareMicrosoftWindowsCurrentVersionRun

Die RunServices-Schlüssel sind benutzerunabhängig und werden vor dem Einloggen ausgeführt, wobei dies bei RunServicesOnce nur einmal geschieht (und zwar beim nächsten Windows-Start). RunOnce und Run hingegen werden nach dem Einloggen ausgeführt, sind aber ebenso benutzerunabhängig. Bei RunOnce verhält es sich wie bei RunOnceServices. Auch hier verschwinden die Schlüssel nach dem nächsten Windows-Start.

Soll der Autostart abhängig vom eingeloggten Benutzer erfolgen, schreiben Sie dies in den entsprechenden Schlüssel unter HKEY_CURRENT_USER:

SoftwareMicrosoftWindowsCurrentVersionRun
SoftwareMicrosoftWindowsCurrentVersionRunOnce

Folgende Funktion kapselt den Zugriff auf diese Schlüssel. Sie erwartet drei Parameter: Den Namen des Eintrages, den kompetten Dateinamen (inkl. Pfad!) der zu startenden Datei und die Art des Eintrages. Dazu wurde folgender Typ definiert:

type
TAutorunKind = (akUserRun, akUserRunOnce, akRun, akRunOnce, akRunServices, akRunServicesOnce);

Aufgrund der oben stehenden Erklärungen sollte die Bedeutung einleuchtend sein.
Die Unit Registry muss eingebunden werden.

uses
Registry;

function CreateAutorunEntry(const AName, AFilename: string; const AKind: TAutorunKind): Boolean;
var
  Reg: TRegistry;
begin
  Result:=False;
  Reg := TRegistry.create;
  try
    if (AKind=akUserRun) or (AKind=akUserRunOnce) then
      Reg.Rootkey:= HKEY_CURRENT_USER
    else
      Reg.RootKey := HKEY_LOCAL_MACHINE;

    case AKind of
      akRun, akUserRun        : Result:=Reg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun', True);
     akRunOnce, akUserRunOnce: Result:=Reg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRunOnce', True);
     akRunServices           : Result:=Reg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRunServices', True);
     akRunServicesOnce       : Result:=Reg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRunServicesOnce', True);
    end;
    Reg.WriteString(AName, AFilename);
  finally
    Reg.Free;
  end;
end;

Folgen der Aufruf führt das eigene Programm beim nächsten Hochfahren von Windows aus, sofern sich der gleiche Benutzer anmeldet.

procedure TForm1.Button1Click(Sender: TObject);
begin
  CreateAutorunEntry(Application.Title, ParamStr(0), akUserRunOnce);
end;