Entwickler-Ecke

Windows API - Herausbekommen wie das Prog gestartet wurde


mehmeh - Di 20.09.05 09:03
Titel: Herausbekommen wie das Prog gestartet wurde
Hallo wie bekomme ich heraus wie mein Programm gestartet wurde.
Also ich mein ob es mit Autostart gestartet ist oder ob ich es selbst gestartet habe.

Ich will das mein Program, wenn es aus dem Autostart heraus gestartet wird, alles von alleine macht und wenn ich es starte, das ich es bzw der Benutzer es macht.


jasocul - Di 20.09.05 09:11

Hast du schon daran gedacht, dem Programm beim Start einfach Parameter mit zu übergeben?
Wenn Parameter da sind, macht dein Programm alles alleine (mit den passenden Parametern), sonst eben nicht.


mehmeh - Di 20.09.05 09:18

ich habe eine Checkbox wo ich Autostart ja/nein mache, das wird dann in einer ini gespeichert und beim starten des Programms wird dies aus der ini ausgelesen. allerdings steht der wert immer auf ja und demzufolge fängt das prog auch immer an, zumachen egal wie es gestartet wurde.


Gausi - Di 20.09.05 09:27

Was jasocul glaube ich meinte ist, dass du bei dem Eintrag in der AutoStart-Liste nicht nur "meinprog.exe" einträgst, sondern "meinprog.exe autostart". Den Parameter "autostart" kannst du dann in deinem Programm abfragen und entsprechend alles automatisch machen. Wenn der User das Programm doppelklickt, fehlt dieser Parameter, und das Programm macht das alles nicht automatisch. Stichworte dazu sind Suche in der Entwickler-Ecke PARAMCOUNT und Suche in der Entwickler-Ecke PARAMSTR.


mehmeh - Di 20.09.05 10:09

das heißt wenn ich dies hier in mein prog schreibe


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for i := 1 to ParamCount do
  begin
    if LowerCase(ParamStr(i)) = 'autostart' then
     begin
      ...
     end;
  end;


weiß es wie es gestartet wurde?

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt


Gausi - Di 20.09.05 10:33

Wenn du beim Eintrag in der Autostart-Liste den entsprechenden Parameter mit übergibts, dann ja.


mehmeh - Di 20.09.05 10:36

das weiß ich nicht, ich hab ein registy-eintrag gemacht
so wie hier http://www.delphi-forum.de/viewtopic.php?t=35845&highlight=autostart
reicht das? Wenn nicht wie mach ich das?


Gausi - Di 20.09.05 10:41

Ich kenn mich mit der Registry nicht so aus, aber ich würde vermuten, dass du da was modifizieren musst:
MyReg.WriteString('Session-Logger',Application.ExeName + ' autostart');
Das würde ich erstmal probieren...aber ohne Garantie ;-)


digi_c - Di 20.09.05 10:44

Da muss das genauso aufgerufen werden "...\programm autostart".
Du kannst auch das programm per Eingabeaufforderung mit "programm autostart" ausführen und es würde das trotzdem erkennen.

Ich empfehle aber das Parameter mit Bindestrich oder Slash aufzuführen, das wird eigentlich immer so gemacht z.B. bei "DIR /?". Muss dann natürlich so im Programm als auch beim Aufruf so sein ;)


mehmeh - Mi 21.09.05 11:49

an digi_c: Ich versteh dich nicht
_____________________
an alle

ich hab den Registry Eintrag so geändert

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
If CheckBox1.Checked = True then
   begin            // wenn die Checkbox aktiviert wurde, 
    try             // wird der Autostart in die Registry eingetragen
     try
      MyReg.RootKey := HKEY_CURRENT_USER; // oder HKEY_LOCAL_MACHINE für alle Benutzer
      MyReg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', true);
      MyReg.WriteString('Session-Logger',Application.ExeName+ ' autostart');
      MyReg.CloseKey;
      autostart := true; // Die Variable autostart wird auf true gesetzt
     except        // tritt ein Fehler während des Eintrags auf,
      on E : Exception do     // wird eine Exception ausgelöst, mit einer Fehlermeldung
       begin                  // und die Werte werden zurückgestzt
         MessageDlg('Autostart konnte nicht gesetzt werden!', mtError, [mbOK], 0);
         autostart := false;     // autostart wird auf false gestzt
         CheckBox1.Checked := false;  // und die Checkbox deaktiviert
       end;
      end;


und hier will ich nachschauen ob das programm mit autostart gestartet ist

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
for i := 1 to ParamCount do

   begin
     if LowerCase(ParamStr(i)) = 'autostart' then
      begin
       AddLogEntry('Autostart');
       Timer2Timer(Sender);
      end;


aber es funktioniert nicht

Moderiert von user profile iconraziel: ___-Zeile gekürzt.


retnyg - Mi 21.09.05 12:27


Delphi-Quelltext
1:
MyReg.WriteString('Session-Logger','"' + paramstr(0) + ' autostart"');                    


Delphi-Quelltext
1:
2:
3:
4:
5:
     if ParamStr(1) = 'autostart' then
      begin
       AddLogEntry('Autostart');
       Timer2Timer(Sender);
      end;


mehmeh - Mi 21.09.05 13:26

user profile iconretnyg hat folgendes geschrieben:

Delphi-Quelltext
1:
MyReg.WriteString('Session-Logger','"' + paramstr(0) + ' autostart"');                    



das funktioniert nicht, weil mein Programm jetzt nicht mehr im autostart ist


digi_c - Do 22.09.05 10:47

Wieso den das? Über paramstr(0) erhälst du doch den Namen des Programms und der wird eingetragen.

Oben meinte ich nur, das es vielleicht klüger wäre dein Parameter anstatt "autostart" "-autostart" zu nennen, weil das eigentlich Standart ist.
Und das es egal ist ob dein Programm per Registry,Autostartordner oder manuell gestartet wird, das Parameter wird ja immer ausgewertet.