AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte AutoStart für Delphi-Programme über Systemregistrierung
Thema durchsuchen
Ansicht
Themen-Optionen

AutoStart für Delphi-Programme über Systemregistrierung

Ein Thema von TOC · begonnen am 15. Feb 2007 · letzter Beitrag vom 15. Feb 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von TOC
TOC
Registriert seit: 5. Jan 2005
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 !
Angehängte Dateien
Dateityp: zip regautostart_f_r_delphi_3.0_993.zip (108,1 KB, 10x aufgerufen)
Dateityp: zip regautostart_f_r_delphi_7.0_572.zip (204,4 KB, 57x aufgerufen)
"Wäre die Erde eine Bank, ihr hättet sie längst gerettet!"
(Zitat GreenPeace)
 
Benutzerbild von TOC
TOC

 
Delphi 7 Personal
 
#11
  Alt 15. Feb 2007, 13:39
Hi!

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

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 !

Grüsse von TOC!
Lars Uwe Hohmann
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#12
  Alt 15. Feb 2007, 13:39
Es fehlen aber noch einige Konfigurationsmöglichkeiten:
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:
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.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von TOC
TOC

 
Delphi 7 Personal
 
#13
  Alt 15. Feb 2007, 13:50
Hi!

Zitat von Luckie:
Es fehlen aber noch einige Konfigurationsmöglichkeiten:
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:
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!
Lars Uwe Hohmann
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#14
  Alt 15. Feb 2007, 13:52
Gib mir noch eine halbe Stunde und ich habe die Klasse fertig.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von TOC
TOC

 
Delphi 7 Personal
 
#15
  Alt 15. Feb 2007, 14:03
Hi!

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!
Lars Uwe Hohmann
  Mit Zitat antworten Zitat
kalmi01
 
#16
  Alt 15. Feb 2007, 14:24
Hi Luckie,

Zeit iss um
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#17
  Alt 15. Feb 2007, 14:25
Fast fertig.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von TOC
TOC

 
Delphi 7 Personal
 
#18
  Alt 15. Feb 2007, 14:35
Hi!

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!
Lars Uwe Hohmann
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#19
  Alt 15. Feb 2007, 14:40
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.
Angehängte Dateien
Dateityp: pas mpuautorun_464.pas (7,3 KB, 23x aufgerufen)
Michael
  Mit Zitat antworten Zitat
Thorben77
 
#20
  Alt 15. Feb 2007, 14:41
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz