![]() |
AutoStart für Delphi-Programme über Systemregistrierung
Liste der Anhänge anzeigen (Anzahl: 2)
Hi!
Ihr kennt sicher den Ordner "Start/Programme/Autostart" in den man seine selbstgeschriebenen Delphi-Programme ablegen kann um diese beim Start von Windows automatisch zu starten. Nungut, das funktioniert zwar, hat aber auch so seine Nachteile. Es gibt nun aber auch die Möglichkeit ein AutoStart-Programm in die Systemregistrierung zu schreiben wie das professionelle Programme machen. Dies hat erhebliche Vorteile, da man seinem Programm so zum Beispiel auch beliebige Parameter beim Programmstart übergeben kann. Im Anhang findest Du zwei kleine Delphi-Beispiel-Programme, eines für Delphi 3.0 und eines für Delphi 7.0. Über die CheckBox kannst Du ein/ausschalten ob das Beispiel-Programm beim Windows-Start, oder beim Anmelden eines neuen Benutzers, automatisch gestartet werden soll. In der Unit "Global" findest Du die entsprechenden Funktionen: // Erzeugt den Namen und den Pfad der Anwendung aus ParamStr(0) Procedure GetProgramNameAndPath(Var ProgramName,ProgramPath:String); // Systemregistrierungseintrag schreiben/löschen und somit AutoStart ein/ausschalten Procedure SetAutoStart(Form:TForm; Flag:Boolean; Param:String); // In der Systemregistrierung nachschauen ob AutoStart für diese Anwendung eingeschaltet ist Function GetAutoStart(Form:TForm):Boolean; Wenn Du nun aus Deinem Delphi-Programm ein AutoStart-Programm machen willst dann binde einfach die Unit "Global" in Dein Programm ein. Grüsse von TOC :cyclops: ! |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Eigentlich überflüssig, da man nur wissen muss, wie man in die Registry schreibt. Und auch einer verknüpfung im Autostart Ordner kann man Parameter mitgeben.
|
Re: AutoStart für Delphi-Programme über Systemregistrierung
Hi!
Zitat:
Grüsse von TOC! |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Dann mach doch besser eine Klasse raus, die man dann direkt verwenden kann:
Delphi-Quellcode:
(Nur mal so als Vorschlag, wie die Klasse aussehen könnte.)
TAutoStart = class(TObject)
private //...; //...; public procedure AutoStart(Programmname, Pfad, Parameter: String; AllUsers: Boolean = False); procedure DelAutoStrat(Programmname: String); end; |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Hi!
Ach, ne eigene Klasse für die 3 kleinen Funktionen? Wat sollte dat bringen? Natürlich kann man aus fast allem Unfug ne Klasse machen oder sogar ne Komponente dafür schreiben, aber sehr sinnvoll finde ich dies nicht :roll: ! Grüsse von TOC! |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Der Sinn ist der, dass du dann keine zwei, drei losen Funktionen in einer Unit rumfliegen hast. Du kannst sie dann ja noch erweitern mit Erstellen von Verknüpfungen im Autostartordner und im RunOnce-Schlüssel der Registry. Also da kann man schon was schönes raus machen.
|
Re: AutoStart für Delphi-Programme über Systemregistrierung
Hi!
Zitat:
Was meinst Du, würde sich der Aufwand lohnen? Grüsse von TOC! |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Eine Komponente würde ich nicht daraus machen. Eine eigene Unit mit Klasse reicht vollkommen.
|
Re: AutoStart für Delphi-Programme über Systemregistrierung
Hi!
Zitat:
Grüsse von TOC! |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Nachdem jeder so seine eigenen Vorzüge in sachen Klassen Units etc hat, hier mein Vorschlag,
mach einfach alle Varianten, schon passt's für jeden :dp: |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Hi!
Zitat:
Und wenn ich Zeit finde bastel ich vielleicht doch noch ne Komponente daraus :stupid: ! Grüsse von TOC! |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Es fehlen aber noch einige Konfigurationsmöglichkeiten:
Delphi-Quellcode:
Was wenn der Autostart benutzerspezifisch sein soll?
RootKey:=hKey_Local_Machine;
Warum muss ich eine TForm Variable übergeben? Was wenn ich anders auf einen Fehler reagieren will, als mit einer Messagebox? Bei GetAutoStart:
Delphi-Quellcode:
öffnest du den Schlüssel mit allen Rechten das ist unnötig, da du nur lesen willst. Und wenn du ihn mit allen Rechten öffnest, muss man selbst zum Lesen Administrator-Rechte haben in HKLM.
Reg:=TRegistry.Create;
|
Re: AutoStart für Delphi-Programme über Systemregistrierung
Hi!
Zitat:
Ich hab versucht das ganze so einfach wie möglich zu machen, deshalb geben die Prozeduren selber die Fehlermeldung raus und in die Registrierung wird immer nur das Programm geschrieben/gelöscht das die Prozedur aufruft. Eben, so einfach wie möglich. Werd mal überprüfen wie man einen Key nur mit Lese-Zugriff öffnen kann. XP ist in dem Punkt mit den Rechten wesentlich empfindlicher als mein Win98SE, da hast Du natürlich schon recht! Grüsse von TOC! |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Gib mir noch eine halbe Stunde und ich habe die Klasse fertig. ;)
|
Re: AutoStart für Delphi-Programme über Systemregistrierung
Hi!
Zitat:
Grüsse von TOC! |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Hi Luckie,
Zeit iss um :mrgreen: |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Fast fertig.
|
Re: AutoStart für Delphi-Programme über Systemregistrierung
Hi!
Zitat:
Sache mal, ich find nirgendwo in der D3 oder D7 Hilfe eine Erklärung wie man den RootKey mit "Nur-Lesen"-Rechten oder so öffnen kann. Gib mir bitte mal nen Tip falls Du weist wie das funzt. Grüsse von TOC! |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Liste der Anhänge anzeigen (Anzahl: 1)
Here we go. Unit mit Klasse im Anhang. Was noch fehlt ist das Erstellen einer Verknüpfung im AutoRun-Ordner des Startmenüs.
Anwendung:
Delphi-Quellcode:
Setzt man die Eigenschaften ExeFilename, RootKey und RunOnce nicht, werden die Standardeinstellungen genommen. Und die wäre für ExeFilename: ParamStr(0), RootKey: HKEY_CURRENT_USER und RunOnce: False.
procedure TForm1.Button1Click(Sender: TObject);
var ar : TMpuAutorun; begin ar := TMpuAutorun.Create; try try ar.AutoRun(True); except on E: Exception do ShowMessage(E.Message); end; finally ar.Free; end; end; AutoRun(True) setzt den Autostarteintrag und AutoRun(False) löscht ihn wieder. Kann er nicht gestzt oder gelsöcht werden, wird eine Exception ausgelöst, die man abfangen kann. |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Zitat:
![]() |
Re: AutoStart für Delphi-Programme über Systemregistrierung
Oder guck in meinen Code. ;)
|
Re: AutoStart für Delphi-Programme über Systemregistrierung
Hi!
Zitat:
Also, nun haben wir das Problem also schon einmal mit ner Klasse und einmal mit ner Unit gelöst. Ich schreib heut nacht vielleicht noch ne Komponente, falls ich mal wieder nicht schlafen kann (zuviel Kaffee :roll:) und mir wieder langweilig ist... Grüsse von TOC :stupid: ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz