Art der Startoption feststellen?



  • hi zusammen,

    gibt es eine möglichkeit festzustellen auf welche art ein prog gestartet wurde?

    ich meine folgendes:
    das prog lässt sich einmal manuell starten (klick auf die exe)
    und
    das prog wird beim systemstart über den autostart gestartet

    kann ich irgendwie einen rückgabewert bekommen was nun die exe aufgerufen hat?

    ziel:
    es sollen 2 verschiedene funktionen ausgeführt werden, jeh nachdem wie das prog gestartet wurde.

    oder hat irgendeiner einen anderen lösungsansatz wie ich das ziel erreichen kann?



  • Hallo

    das kannst du über Kommandozeilen-Parameter auswerten.
    Zum Beispiel in dem Autostart-Eintrag den Parameter -autostart dranhängen. Jetzt kannst du zur Laufzeit über die Eigenschaft ParamStr auswerten, ob dieser Parameter vorhanden ist oder nicht.

    bis bald
    akari



  • hi akari,

    danke, sehr guter ansatz 👍

    übrigends, wohnst du hier im forum? so schnell wie du hier antwortest 😮 😃



  • hi zusammen,

    irgendwie will ParamStr nicht so wie ich es will. mein parameter wird einfach nicht erkannt.

    die werte übergebe ich so der registry:

    AnsiString pfad = Application->ExeName + " -autostart";
    

    sieht dann so aus: d:\test\irgendwas\anwendung.exe -autostart

    lass ich mir den string mit ParamStr(0) ausgeben, kommt: d:\test\irgendwas\anwendung.exe

    Bei ParamStr(1) kommt keine ausgabe.

    wenn ich mir die Anzahl der parameter ausgeben lass (ParamCount()), kommt immer nur 0 dabei raus.

    google hat mir auch nicht viel weiter geholfen. dort gehen die genauso vor, scheint aber zu funzen.

    fehlt evtl. noch irgendeine header datei? includiert hab ich:

    #include <vcl.h>
    #include <winreg.h>
    #include <Registry.hpp>
    


  • schau mal nach was in der Registry unter deinem Eintrag steht.

    Aber afaik muss der Aufruf mit Parametern in Anführungszeichen gesetzt werden.
    Also so:
    AnsiString pfad = "\"" + Application->ExeName + " -autostart" + "\"";



  • Sorry für den Doppelpost aber so muss das richtig aussehen:

    AnsiString pfad = "\"" + Application->ExeName + "\"" + " -autostart";
    


  • hi derBiber,

    die Variante habe ich auch schon ausprobiert, leider auch ohne Erfolg 😞

    // edit

    wie ich bemerke liefert ParamStr(0) nicht den wert aus der registry zurück, sondern den programmpfad meiner exe. (ist zwar identisch mit dem registry eintrag, aber ohne parameter. hier mal das codebeispiel:

    TRegistry *reg = new TRegistry;
    
    		reg->RootKey = HKEY_LOCAL_MACHINE;
    		reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",true);
            if(reg->ValueExists("APVXDWIN"))
            {
    		    Label1->Caption = ParamStr(0);
            }
            else
                Application->MessageBoxA("","",MB_OK);
    

    wieso holt ParamStr den string nicht aus der registry?



  • Glaube hier werden einige Dinge verwechselt:

    Die Aufrufparamter beim Programm haben nix mit der Registry zu tun. Auch wird keinerlei Inhalt der Registry als Paramter beim Programmstart mitgegeben.

    Insofern läßt sich wohl nicht herausbekommen, wie ein Programm gestartet wurde. AKARI meinete, dass wenn ein EXTRA Eintrag im Autostartordner gemacht wird (eine Verknüpfung), dass diesem dann ein Parameter mitgegeben werden kann. Das geht dann aber nur, wenn es für die verschiedenen Startmöglichkeiten auch verschiedene Verknüpfungen gibt mit verschiedenen Parametern. Der Orignial-Exe ist es jedenfalls nicht anzusehen, wie sie gestartet wurde.



  • @ Christian411,

    ups, da hab ich akari falsch verstanden. dachte ich könnte es über die registry machen.

    @ all

    hat jemand einen link wo ich in erfahrung bringe wie man verknüpfungen mit parameterübergabe erstellt? mit der bcb hilfe bin ich bis jetzt nicht wirklich weiter gekommen.



  • Hallo

    siehe zum Beispiel hier.

    bis bald
    akari



  • hallo zusammen,

    hab ein paar tage an einem anderen projekt gearbeitet, daher melde ich mich jetzt erst.

    akari, vielen dank für den link. der hat mein prob lösen können 🕶

    @all
    herzlichen dank 👍


Anmelden zum Antworten