wieder Programmparameter aus String



  • Ich hab jetzt eine Funktion geschrieben, mit der man die Programmparameter aus einem String extrahieren kann:

    void __fastcall TMainForm::ExtractParams(AnsiString FullName,TStringList &Ausgabe)
    {
     AnsiString Suchstring = FullName;
     AnsiString Pfad;
     bool KeineParam = false;
     if(FullName.SubString(0,1)=="\"")
     { //Erstes Zeichen ist "
      if(FullName.SubString(FullName.Length(),1)=="\"")
      { //Kompletter Name in Anführungszeichen - " entfernen und Suchstring ändern
       Pfad = FullName.SubString(2,FullName.Length()-2);
       KeineParam = true;
      }
      else
      { //Pfad+Name in Anführungszeichen, danach Parameter - Pfad und Suchstring ändern
       int ZwAnf = (FullName.SubString(2,FullName.Length()-1)).AnsiPos("\"");
       Suchstring = FullName.SubString(ZwAnf+2,FullName.Length()-ZwAnf);
       Pfad = FullName.SubString(2,ZwAnf-1);
       delete &ZwAnf;
      }
     }
      //Pfad extrahieren:
     if(Pfad=="")
     {
      TStringList *TempListEP1 = new TStringList;
      split(*TempListEP1,Suchstring," ");
      Pfad = TempListEP1->Strings[0];
     }
      //Parameter extrahieren:
     TStringList *TempListEP2 = new TStringList;
     if(!KeineParam) split(*TempListEP2,Suchstring," ");
     TStringList *ausgabe = &Ausgabe;
     ausgabe->Add(Pfad);
     for(int i=1;i<TempListEP2->Count;i++) ausgabe->Add(TempListEP2->Strings[i]);
    }
    

    Zur Erklärung: split(TStringList,String eingabe,String delimiter) teilt den String eingabe an den Zeichen delimiter in die StringList auf.

    Bisher hat alles gut geklappt, bis ich auf folgendes Programm gestoßen bin:
    "D:\Programme\TuneUp Utilities\MemOptimizer.exe autostart" (ohne Anführungszeichen!) beim Windows Autostart funzts

    Wie soll man da wissen, was die Parameter sind 😕

    Gruß,
    BCB6-User



  • - schau mal

    ParamStr(int Index)
    

    an

    if(FullName.SubString(0,1)=="\"")
    

    wieso "0"? AnsiString fängt bei 1 an



  • ParamStr(int Index) kann doch nur beim Programm, dass gerade läuft die Parameter extrahieren, oder nicht? Und SubString(0,1) funzt auch



  • Hallo

    ParamStr(int Index) kann doch nur beim Programm, dass gerade läuft die Parameter extrahieren, oder nicht?

    Ach so, jetzt versteh ich, was du die ganze Zeit willst : Du liest die AutoRun-Einträga der Registry aus und willst diese nach Programm und Parameter aufschlüsseln. Man, das mußt du doch mal deutlich sagen.
    Dann hast du natürlich recht, ParamStr hilft dir da nicht.

    Und SubString(0,1) funzt auch

    Ganz bestimmt nicht. Es wird im besten Fall nichts passieren.
    Aus der Borland-Hilfe :

    Die Indexnumerierung beginnt mit 1. Bei dem String "Hallo" und einem Indexwert von 2 würde beispielsweise das Zeichen 'a' zurückgegeben...
    Der Teilstring enthält die in count angegebene Anzahl von Zeichen und beginnt an der mit index festgelegten Position.

    Bisher hat alles gut geklappt, bis ich auf folgendes Programm gestoßen bin:
    "D:\Programme\TuneUp Utilities\MemOptimizer.exe autostart" (ohne Anführungszeichen!) beim Windows Autostart funzts

    Das ist natürlich ein Problem. Vielleicht hilft es ja, zuerst mal den Pfad mit ExtractFilePath zu extrahieren. Das sollte das Leerzeichen aus "\TuneUp Utilities\" erkennen. Alles was übrigbleibt, ist der reine Programmname und dananch Parameter.

    bis bald
    akari



  • Super Idee, Danke
    Das SubString(0,1) hat bei mir aber richtig funktioniert, aber ich werds trotzdem mal umändern


Anmelden zum Antworten