Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Feststellen, ob ein Programm als Autostart gestartet ist (https://www.delphipraxis.net/160736-feststellen-ob-ein-programm-als-autostart-gestartet-ist.html)

rainerg 29. Mai 2011 07:17

Feststellen, ob ein Programm als Autostart gestartet ist
 
Hallo erstmal!

Wie kann ich im Programm feststellen, ob es gerade als Autostartprogramm beim Systemstart gestartet wurde.

Ich möchte dadurch ein gesondertes Verhalten erreichen, wenn das Proggi im Autostartmodus gestartet wird.

Aphton 29. Mai 2011 07:23

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Eine interessante Frage.
Vlt. könnte man mal schauen, ob irgendwelche spezielle Parameter übergeben werden.
Ich werd mal nachschauen, was so anders ist.

Luckie 29. Mai 2011 09:04

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Was für Parameter sollen denn da übergeben werden? Jedenfalls ist mir da nichts bekannt. Jedes Programm, welches mit Kommandozeilenparametern arbeitet, müsste diese ja noch bei einem eventuellen Autostart mitberücksichtigen und das habe ich noch nie in solchen Programmen gemacht.

Mein Blick in die Glaskugel verrät mir, dass dein Programm irgendwelche Dateien nicht findet, weil mit relativen Pfaden gearbeitet wurde. Dieses Problem taucht nämlich öfters auf bei Programmen, die aus dem Autostart gestartet wurden.

himitsu 29. Mai 2011 09:05

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
PS: Dazu gibt es allein letzes Jahr schon mindestens 2 Threads, wo das bis ins Kleineste durchgekaut wurde.

Nein, wirklich sicher prüfen kannst du es garnicht.

Übergib deinem Programm beim Autostart einfach einen Parameter,
damit das Programm weiß, daß es vermutlich von dort gestartet wurde.

Luckie 29. Mai 2011 09:12

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Zitat:

Zitat von himitsu (Beitrag 1103489)
Übergib deinem Programm beim Autostart einfach einen Parameter,
damit das Programm weiß, daß es vermutlich von dort gestartet wurde.

Das ist aber sehr unsicher. Was wenn der Benutzer es nicht weiß, wenn er es in den Autostart einträgt? Oder guckst du bei so was erst mal in die Hilfe oder die Dokumentation des Programms bevor du so was machst? Also ich mache das nicht.

himitsu 29. Mai 2011 09:16

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Editiert wirklich jemand die Registrieeinträge manuell? (wenn ja, dann hat er/sie halt Pech)

Dafür stellt man doch im Programm eine Option bereit und das Programm trägt sich selber ein.
Und da weiß das Programm (der Programmierer) ja, was zu machen ist ... sollte es/er zumindestens. :stupid:

Luckie 29. Mai 2011 09:17

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Also ich habe schon öfters mal ein Programm in die Autostart-Verknüpfung des Startmenüs verschoben.

himitsu 29. Mai 2011 09:26

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Ist ja auch vollkommen OK, aber wenn ein Programm ein spezielles "Verhalten" benötigt, dann muß es selber dafür sorgen, daß dieses Verhalten auch eintritt.

Ja, man könnte auch schauen, von welchem Prozess aus das Programm gestartet wurde ... ging ja irgendwie (war mal irgendwo in ein paar der ProcessSnapshot-Threads versteckt/nebenbei erwähnt worden, also da wo man eine Liste der laufenden Prozesse erstellt).

Über den Parameter isses aber sicherer.
PS: Bei mir läuft ein Programm, welche einige Autostarts leicht verzögert ausführt, damit der PC schneller startet ... da würde das mit dem "wer hat mich gestartet"-Nachsehn nicht funktionieren. :wink:

Luckie 29. Mai 2011 09:32

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Der Elternprozess dürfte der Explorer sein.

rollstuhlfahrer 29. Mai 2011 09:43

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Das ist er auch, wenn das Programm per Explorer/Desktop/Verknüpfung/Startmenü gestartet wurde.

Einzige mir bekannte Möglichkeit: An allen bekannten Autostart-orten nachschauen, ob das Programm dort eingetragen ist. Dann weiß dein Programm, dass es im Autostart steht.

Einzig die Information, dass dein Programm vom User in den Autostart gesetzt wurde, sollte dir absolut nichts bringen. Wenn ich ein Programm nach der Anmeldung gerne gestartet sehe, dann setze ich das schon mal selbst in den Autostart und dann hat das da auch zu bleiben. Und wenn du Probleme mit Pfaden hast, dann kannst du einen billigen Workaround verwenden:
Delphi-Quellcode:
ChDir(ExtractFilePath(Applicaltion.ExeName));
.

Bernhard

Luckie 29. Mai 2011 09:51

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1103498)
Das ist er auch, wenn das Programm per Explorer/Desktop/Verknüpfung/Startmenü gestartet wurde.

Genau das ist der Punkt. Es hilft nicht den Elternprozess zu kennen.

Zitat:

Und wenn du Probleme mit Pfaden hast, dann kannst du einen billigen Workaround verwenden:
Delphi-Quellcode:
ChDir(ExtractFilePath(Applicaltion.ExeName));
.
Und wenn ich es gleich richtig mache, brauche ich diese Krücke nicht.

himitsu 29. Mai 2011 09:57

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Das programm sieht, daß es irgendow in einem der vielen Autostartorte liegt, aber was bringt es as zu wissen?
Das Programm kann ja dennoch (nochmal) normal gesartet wurden sein.

Nja, vielleicht wäre es hilfreich, wenn man mal den Gund erfährt, warum das Programm unterschiedlich reagieren muß.

rainerg 29. Mai 2011 10:09

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1103498)
Das ist er auch, wenn das Programm per Explorer/Desktop/Verknüpfung/Startmenü gestartet wurde.

Einzige mir bekannte Möglichkeit: An allen bekannten Autostart-orten nachschauen, ob das Programm dort eingetragen ist. Dann weiß dein Programm, dass es im Autostart steht.

Bernhard

Mal genauer gesagt, was ich erreichen möchte:

Ich habe ein Programm geschrieben, dass Datum/Uhrzeit einer Datei setzt. Im Autostart-Modus soll das Proggi bei diesen Dateien, die in einer INI-Datei hinterlegt sind, das Dateidatum halt setzen, ohne es die Form angezeigt wird und sich dann selber beenden.
Wird das Proggi normal gestartet, dann soll das Form erscheinen, damit ich manuell Datum/Uhrzeit für eine Datei setzen kann und damit ich das Proggi konfigurieren kann, also z. B. die gewünschten Dateien auswähle. Und natrülich soll es sich nicht selber terminieren.

Zurzeit habe ich das wie folgt gelöst:

Delphi-Quellcode:
procedure TMainForm.FormActivate(Sender: TObject);
var i:integer;
begin
        IniCtrl.ReadStrings('Files','Item',FileListBox.Items);
        if UpperCase(ParamStr(1))='AUTO' then begin
          if FileListBox.Items.count>1 then begin
            for i:=1 to FileListBox.Items.Count do begin
              SetFileDate(FileListBox.Items[i],now);
            end;
          end;
          Application.Terminate;
        end;
end;
Ist also an der EXE der Parameter AUTO gehängt, dann setze das Datum (Okay - ein vorheriges Prüfen, ob die Datei da noch da, ist noch eine andere Baustelle, kommt aber noch rein ;-) ).

Aber wenn das Proggi selber merkt, dass es per Autostart gestartet wurde, wäre das ja unnötig.

Aphton 29. Mai 2011 10:12

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Zitat:

Zitat von Luckie (Beitrag 1103488)
Was für Parameter sollen denn da übergeben werden? Jedenfalls ist mir da nichts bekannt. Jedes Programm, welches mit Kommandozeilenparametern arbeitet, müsste diese ja noch bei einem eventuellen Autostart mitberücksichtigen und das habe ich noch nie in solchen Programmen gemacht.

Ich habe nicht Kommandozeilenparametern gemeint. Ich dachte mehr, das irgendwelche Flags gesetzt werden und man diese Werte (Parameter) abfragen kann...
Habs etwas falsch ausgedrückt, sry

jaenicke 29. Mai 2011 10:14

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Hier musst du dann einen Parameter /silent oder eben /auto benutzen. Das geht nicht anders. So machen das auch andere Programme. Du hast also schon den richtigen Weg.

Wenn der Benutzer deine Option zum in den Autostart legen nicht nutzen möchte, muss er halt damit leben, dass es nicht richtig funktioniert.

Das in FormActivate zu packen ist allerdings haarsträubend. :shock:
Sowas gehört in den Projektquelltext (Projekt in der Projektverwaltung anklicken --> Strg + V oder Rechtsklick drauf und "Quelltext anzeigen"). Und wenn das benutzt wird, erzeugt man das Formular gar nicht erst...

rollstuhlfahrer 29. Mai 2011 10:15

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Zitat:

Zitat von rainerg (Beitrag 1103501)
Aber wenn das Proggi selber merkt, dass es per Autostart gestartet wurde, wäre das ja unnötig.

Du könntest nur aus der Zeit, die der Benutzer angemeldet ist, schließen, dass es der Autostart sein müsste. Mehr geht wirklich nicht.

Bernhard

himitsu 29. Mai 2011 10:38

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Zitat:

Zitat von Aphton (Beitrag 1103502)
Ich dachte mehr, das irgendwelche Flags gesetzt werden und man diese Werte (Parameter) abfragen kann...

Nee, sowas gibt's nicht.

OnActivate wird aufgerufen, wenn die Form schon angezeigt wurde und gerade den Eingabefokus bekommteb hat.
Und jedes weitere Mal, wenn es den EIngabefokus bekommt.

Da das Programm sich dann beendet, wäre auch noch OnCreate OK gewesen.

jaenicke 29. Mai 2011 10:41

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Zitat:

Zitat von himitsu (Beitrag 1103505)
OnActivate wird aufgerufen, wenn die Form schon angezeigt wurde und gerade den Eingabefokus bekommteb hat.
Und jedes weitere Mal, wenn es den EIngabefokus bekommt.

Da das Programm sich dann beendet, wäre auch noch OnCreate OK gewesen.

Ist aber beides fehl am Platze. Das Formular wird schließlich überhaupt nicht erst gebraucht...

himitsu 29. Mai 2011 10:45

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Stimmt zwar, aber in der Klickbuntiprogrammierung laß ich sowas auch schonmal durchgehn. :roll:

rainerg 29. Mai 2011 10:55

AW: Feststellen, ob ein Programm als Autostart gestartet ist
 
Zitat:

Zitat von jaenicke (Beitrag 1103503)
...
Das in FormActivate zu packen ist allerdings haarsträubend. :shock:
Sowas gehört in den Projektquelltext (Projekt in der Projektverwaltung anklicken --> Strg + V oder Rechtsklick drauf und "Quelltext anzeigen"). Und wenn das benutzt wird, erzeugt man das Formular gar nicht erst...

Okay, das werde ich noch optimieren - danke für den Tipp!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 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