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;