Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] Uruchomienie zewnętrznej aplikacji z parametrami.

02 Sty 2005 18:12 5532 15
  • Poziom 14  
    W borland c++ robie pewien programik, potrzebuje w nim uruchomić jedną zewnętrzną aplikacje znajdującą sie w tym samym folderze co projekt wszystko ładnie sie odpala jednak nie wiem jak zrobić możliwość dodania do aplikacji parametrów odczytanych ze zmiennych.

    przykładowo mam to:
    WinExec(".\\send.exe", SW_SHOW);

    a potrzebuje mieć to:
    zmienna:char;
    zmienna="test";
    WinExec(".\\send.exe name=" +parametr1 , SW_SHOW);

    przykładowo sam program send.exe odpalony z konsoli ma postać
    send.exe name="test" a=1 b=7 haslo="test" login="test"

    mam nadzieje że ktoś zrozumie o co mi chodziło, dodam jeszcze że parametrów ma być wiecej i bedą to zarówno ciągi wyrazów jak i liczby

    sory ża tak namieszałem ale dopiero zaczynam z tym językem :)

    Zamykam. - arnoldziq
  • Poziom 14  
    tak jak mówiłem dopiero zaczynam z tym c++ wiec jesli mógł byś powiedzieć coś wiecej na temat tego system() własciwie jak najwiecej :) to będe bardzo wdzięczny.
  • Pomocny post
    Poziom 29  
    0) Chyba masz jakąś postawową książkę o .c? Jak nie, to koniecznie się zaopatrz!
    1) Poszukaj w helpie

    Funkcja wykonuje podane w parametrze polecenia, tak, jakbyś je wykonał wpisując je samemu z Command Line.

    np.: system("calc.exe") ; //<---- bedzie kaklulator
    system("jakiś.exe a b c"); //<---- wykonanie exeka z argumentami.

    Jest niewydajna, nie pozwala ustawić różnych opcji wykonywanemu programowi, ale działa.


    Przykładzik z inetu:

    system("pause"); prototyp w pliku stdlib.h

    funkcja system("nazwa_komendy") pozwala na wykonanie zawartej w nawiasach komendy systemowej przez system operacyjny. W systemie DOS komenda pause jest swego rodzaju przerywnikiem, wyœwietla komunikat: Naciœnij dowolny klawisz, aby kontynuować . . . Dopiero po naciœnięciu jakiegoœ klawisza system operacyjny może kontynuować interpretowanie następnych poleceń.
  • Poziom 14  
    Postanowiłem troche zwolnić i najpierw wykonać wersje tego programu w delphi, no i już pierwszy problem, jaki jest zamiennik cplusowego SYSTEM () w delphi -tzn jak odpalić zewnętrzny program z parametrami, dzięki za pomoc z góry.
  • Poziom 20  
    Lepiej napisz w Builderze wszystkie standardowe funkcje c++ chodzą a po drugie to jest naprawde przyjazne i porównywalne w Delphi
  • Poziom 11  
    A poza tym nie ma sensu przesiadać się niżej. Niby jakieś plusy niektórzy znajdują ale częściej ideologiczne niż praktyczne.
  • Poziom 14  
    spróbuj procke "CreateProcess".
  • Poziom 20  
    Wykroiłem z pewnego projektu taki programik przykładowy:

    Code:

    /*
    //   Program demonstrujacy uzycie polecenia system(const char*)
    //   Pakuje wszystkie pliki .cpp i .h z katalogu, w którym sie
    //   znajduje. Plik .zip przyjmuje jako nazwe biezaca date
    //   w katalogu z projektem musi się znajdować paker zip.exe
    //   do sciagniecia np z http://www.info-zip.org/pub/infozip/
    //   autor pliku: www.bielsky.elektroda.pl
    */
    #include <iostream>
    #include <stdlib.h>
    #include <fstream>

    using namespace std;

    int main(int argc, char *argv[])
    {
       cout << "******************************\n"
             "*                            *\n"
             "*   Archiwizator projektu    *\n"
             "*                            *\n"
             "******************************\n\n";
        //pobieranie daty z systemu
        //definicje uzywanych funkcji znajduja sie w time.h
        // ( posrednio dolaczone za pomoca #include<stdlib.h> )
        time_t curtime;
        struct tm *loctime;
        char timer[256];
        char logtimer[256];
        //pobranie czasu bieżącego
        curtime=time(NULL);
        loctime=localtime(&curtime);
        // konwersja daty na postac zrozumiala
        //data w okreslonym formacie znajdzie sie w zmiennej char timer[]
        strftime(timer,sizeof(timer),"%d%m%Y",loctime);

        //komende do wykonania ze wzgledu na wygode zapisujemy jako std::string
        string komenda; 
        //stringi mozna laczyc za pomoca operatora +
        //niestety, zmienna timer jest lancuchem "w stylu c",
        //wiec jest przyokazji konwertowana(rzutowana)
        komenda="zip.exe -j -r -q " + (string)timer +".zip " "*.cpp *.h";
        cout << "Wykonam komende:\n" << komenda << endl <<endl;
        //wywolujemy polecenie system(char *) uruchamiajace zapisana komende
        //jako parametr wywolania musi miec klasyczna tablice znakowa, wiec zamieniamy
        //string na taka tablice za pomoca .c_str()
        system(komenda.c_str());

        //jeszcze jedno wywolanie system(char *)
        //powoduje wyswietlenie komunikatu "aby kontynuowac......"
        system("PAUSE");   
        //a to wywolanie wyczysci ekran
        system("cls");
       
        return 0;
    }


    Program kompilowałem pod MINGW (devCpp), raczej nie ma odchyleń od standardu, więc borland też powinien sobie poradzić.
  • Poziom 14  
    Dziekuje wszystkim za wyczerpujące odpowiedzi, pozdrawiam bywalców forum.
  • Admin grupy Projektowanie
    Korzystałem z system() w celu uruchomienia programu znajdującego się w katalogu razem z główną aplikacją.

    Wszytko było w porządku ale gdy na formie umieściłem komponenty:
    DriveComboBox
    DirectoryListBox
    FileListBox
    Okazało się że przy przeglądaniu za ich pomocą katalogów, zmienia się katalog bierzący dla polecenia system()
    w efekcie następuje błąd gdyż system nie może odlaźć pliku.

    Pliki z polecenia system() są szukane w katalogu wskazywanym przez DirectoryListBox oraz zawartości zmiennej systemowej PATH.

    Czy ktoś natrafił na taki problem ?
  • Poziom 20  
    Żeby uzyskać ścieżke gdzie dana aplikacja pracuje powinno pomóc to : (ExtractFileDir(Application->ExeName) + "\\1.jpg" )

    Oczywiście 1.jpg to przykładowy plik :)
  • Admin grupy Projektowanie
    Ale jak teraz ustawić ścieżkę jako katalog bieżący z którego będzie korzystał
    system() ?
  • Poziom 20  
    np.
    system("cd _sciezka_do_katalogu_ ");

    albo:
    nie wiem jakimi bibliotekami operującymi na plikach dysponujesz
    funkcja może się nazywać np:
    setcwd(char*)
    chdir(char*)