Parameter bei Programmstart



  • Hallo,
    ich will beim Programmstart abfragen ob ein Parameter mitgegeben wurde.

    Hab das so versucht:

    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    char c;
    CString s;
    cmdStart.ParseParam(&c,TRUE,TRUE);
    if(cmdInfo.m_strFileName != "auto")
    {
    	AfxMessageBox("xyz");
    	PostQuitMessage(0);
    }
    

    Wenn ich die anwendung nun normal per Mausklick starte, kommt die MessageBox und die Anwendung wird wieder beendet, was ja auch sein soll.
    Wenn ich die Anwednung jedoch so starte:

    Name.exe auto
    

    Dann sagt er mir immer

    [Verzeichnis]\auto nicht gefunden
    

    Woran kann das leigen ?

    PS: Hab das ganze vor etwa 1,5 Jahren schon mal gemacht, hab mir den Quellcode auch angesehen, aber ich kann keinen Unterschied entdecken. 😞

    Kann mir jemand helfen ?

    Danke 🙂



  • wird diese meldung von deinem programm generiert?



  • versuchs mal mit:

    "Name.exe" auto

    Bei mir hat es so geklappt...



  • @dEUs:
    Ja von dem Programm das aufgerufen wird.

    @EnERgYzEr:
    Wie meinst du das ?

    Ach ja übrigens in cmdStart.m_strFileName steht das richtige drin, je nachdem wie das Prog aufgerufen wird. (also "auto" oder <<leer>>).



  • Da is eines zuviel 🤡



  • semiklonjäger schrieb:

    Da is eines zuviel 🤡

    ???

    EDIT:
    Achso, naja das ist aber nicht der Fehler. 😉



  • Zeig mal bitte wie Du Dein Programm startest.

    ShellExecute ? WinExec ?



  • Naja normalerweise mit ShellExecute.
    Zum ausprobieren hab ich es jetzt aber mal so gemacht.

    1.) Start-> Ausführen
    2.) C:\Settings.exe auto

    Es kommt bei beiden Methoden die oben genannte MessageBox. 😞



  • Nun, das ParseCommandLine() geht streng nach den Vorgaben in der MFC vor (wie sehen die Parameter aus /p /dde usw.) und demnach ist Dein "auto" als Filename zu bewerten, der beim start göffnet wird. Da es aber kein solches File gibt, kann es nicht geöffnet werden und Du erhälst diese Fehlermeldung.
    Das ProcessShellCommand() kümmert sich darum FileOpen aufzurufen!

    Jetzt hast Du 2 Möglichkeiten:
    Du belässt es so, und prüfts ob in cmdInfo.m_strFilename "auto" drinsteht und machst dann Deine Funktion else ProcessShellCommand() (die ja wieder FileOpen versuchen würde)
    oder
    Du vergnügst Dich mit GetCommandLine() und CommandLineToArgvW() usw... und parst Dir Deine Commandline selber 😃



  • Oder:

    Du behandelst das Argument als FLAG (-auto). 😉



  • @count.negativ
    Da kommt ein Fehler beim Speicherzugriff in Adresse xxx.

    @Oli
    bitte erklären, danke 😃 😉



  • Hehe habs gelöst:

    CCommandLineInfo cmdInfo; 
    ParseCommandLine(cmdInfo); 
    char c; 
    CString s; 
    cmdStart.ParseParam(&c,TRUE,TRUE); 
    if(cmdInfo.m_strFileName != "auto") 
    { 
        AfxMessageBox("xyz"); 
        PostQuitMessage(0); 
    }
    
    cmdInfo.m_strFileName = "Name.exe";
    

Anmelden zum Antworten