Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   AutoStart für Delphi-Programme über Systemregistrierung (https://www.delphipraxis.net/86529-autostart-fuer-delphi-programme-ueber-systemregistrierung.html)

TOC 15. Feb 2007 11:32


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: !

Luckie 15. Feb 2007 11:43

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.

TOC 15. Feb 2007 12:00

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Hi!

Zitat:

Zitat von Luckie
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.

Weiss aber nun mal nit jeder was man wo in die Systemregistrierung schreiben muss für ne Autostart Funktion! Aber nun kann jeder, den es interessiert, im SourceCode nachlesen wie´s geht!

Grüsse von TOC!

Luckie 15. Feb 2007 12:06

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Dann mach doch besser eine Klasse raus, die man dann direkt verwenden kann:
Delphi-Quellcode:
TAutoStart = class(TObject)
private
  //...;
  //...;
public
  procedure AutoStart(Programmname, Pfad, Parameter: String; AllUsers: Boolean = False);
  procedure DelAutoStrat(Programmname: String);
end;
(Nur mal so als Vorschlag, wie die Klasse aussehen könnte.)

TOC 15. Feb 2007 12:13

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!

Luckie 15. Feb 2007 12:24

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.

TOC 15. Feb 2007 13:01

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Hi!

Zitat:

Zitat von Luckie
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.

Ja, gut, das hört sich nicht so schlecht an. Ich könnte ja auch ne nichtvisuelle Komponente draus machen, dann bräuchte der Programmautor ja nur die Eigenschafft "Enabled" (z.B.) auf true/false setzen?
Was meinst Du, würde sich der Aufwand lohnen?

Grüsse von TOC!

Luckie 15. Feb 2007 13:06

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Eine Komponente würde ich nicht daraus machen. Eine eigene Unit mit Klasse reicht vollkommen.

TOC 15. Feb 2007 13:20

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Hi!

Zitat:

Zitat von Luckie
Eine Komponente würde ich nicht daraus machen. Eine eigene Unit mit Klasse reicht vollkommen.

Naja, eine Klasse muss erst erzeugt und später wieder freigegeben werden und dafür braucht man dann noch ne Variable etc.. Ich glaube das mit der Klasse ist zu umständlich! Ok, man könnte eine eigen Unit für solche Spielereien schreiben, oder für Leute mit recht wenig Plan ne Komponente die man einfach ins Formular klickt und dann true/falls etc... Auf der anderen Seite sammle ich in der Unit "Global" halt Sachen die ich in fast all meinen Programmen brauche und verwende...

Grüsse von TOC!

matashen 15. Feb 2007 13:31

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:

TOC 15. Feb 2007 13:39

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Hi!

Zitat:

Zitat von matashen
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:

Na, das wär´n Aufwand! Mein Vorschlag: Ihr habt den SourceCode! Spielt doch ein wenig damit herum! Wer ne Klasse draus machen will kann dies gerne tun und hier posten!

Und wenn ich Zeit finde bastel ich vielleicht doch noch ne Komponente daraus :stupid: !

Grüsse von TOC!

Luckie 15. Feb 2007 13:39

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Es fehlen aber noch einige Konfigurationsmöglichkeiten:
Delphi-Quellcode:
RootKey:=hKey_Local_Machine;
Was wenn der Autostart benutzerspezifisch sein soll?
Warum muss ich eine TForm Variable übergeben?
Was wenn ich anders auf einen Fehler reagieren will, als mit einer Messagebox?

Bei GetAutoStart:
Delphi-Quellcode:
Reg:=TRegistry.Create;
ö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.

TOC 15. Feb 2007 13:50

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Hi!

Zitat:

Zitat von Luckie
Es fehlen aber noch einige Konfigurationsmöglichkeiten:
Delphi-Quellcode:
RootKey:=hKey_Local_Machine;
Was wenn der Autostart benutzerspezifisch sein soll?
Warum muss ich eine TForm Variable übergeben?
Was wenn ich anders auf einen Fehler reagieren will, als mit einer Messagebox?

Bei GetAutoStart:
Delphi-Quellcode:
Reg:=TRegistry.Create;
ö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.

Gut, Ok, also das TForm muss ansich nur übergeben werden damit MessagBox modal das entsprechende Fenster blockt solange dei Fehlermeldung angezeigt wird. Da könnte man wirklich auch eine eigene Exception-Klasse definieren die der Programmierer in seinem Programm dann halt abfangen und die Fehlermeldung selber ausgeben müsste.

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!

Luckie 15. Feb 2007 13:52

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Gib mir noch eine halbe Stunde und ich habe die Klasse fertig. ;)

TOC 15. Feb 2007 14:03

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Hi!

Zitat:

Zitat von Luckie
Gib mir noch eine halbe Stunde und ich habe die Klasse fertig. ;)

Cool! Postest Du die dann hier auch?

Grüsse von TOC!

kalmi01 15. Feb 2007 14:24

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Hi Luckie,

Zeit iss um :mrgreen:

Luckie 15. Feb 2007 14:25

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Fast fertig.

TOC 15. Feb 2007 14:35

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Hi!

Zitat:

Zitat von Luckie
Fast fertig.

Gut Ding braucht Weile, lass Dir ruhig Zeit!

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!

Luckie 15. Feb 2007 14:40

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:
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;
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.

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.

Thorben77 15. Feb 2007 14:41

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Zitat:

Zitat von TOC
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.

Such mal nach Delphi-Referenz durchsuchenAccess im Zusammenhang mit TRegistry.

Luckie 15. Feb 2007 14:41

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Oder guck in meinen Code. ;)

TOC 15. Feb 2007 15:27

Re: AutoStart für Delphi-Programme über Systemregistrierung
 
Hi!

Zitat:

Zitat von Luckie
Oder guck in meinen Code. ;)

Dein Code ist echt genial :thumb: ! Ach, so ist dass, bei D7 kann man im TRegistry.Create also in der überladenen Version den Zugriffsmodus angeben. Das wusste ich wirklich noch nit weil das in D3 noch nit geht. Danke für den Tipp!

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