fremde EXE ausführen (mit Parameter)



  • Hi,

    es müsste in etwa so funktionieren:

    ShellExecute (NULL, "open", "C:\\Programme\\DeinProgramm.exe" , DeinParameter.c_str(), NULL, SW_SHOWNORMAL);
    

    Die Variable "DeinParameter" ist AnsiString und muss mit c_str() in char umgewandlt werden, wie es im Code beschrieben ist.

    Gruß
    ravel



  • danke, das ist das was ich gesucht habe.
    eine frage dazu noch: läuft diese Funktion unter Linux / Unix ?
    ich brauche nur f. windows, aber würde mich mal interessieren, wie man das gleiche unter Linux/Unix schreibt.
    heimschmiede



  • Hi,

    ich glaube die ShellExecute ist eine Windows-API-Funktion und daher nicht Linux/Unix-fähig.
    EDIT: Daniels Funktion sollte auf anderen OS auch funktionieren.

    Mal was anderes:
    Daniel E, weißt du zufällig wie man die DOS-Box beim system()-Befehl unsichtbar macht?

    Gruß
    ravel



  • was ist mit system(3) gemeint ?
    er erwartet einen command als const char. aber an welches programm wird dieser command weitergegeben.
    ich hab dann:
    system("C:\Prog.exe parameter");
    versucht, aber klappt nicht.
    heimschmiede



  • Hallo,

    '\'-Zeichen müssen verdoppelt werden, wenn es sich nicht gerade um eine Escape-Sequenzen handelt:

    system("C:\\Prog.exe parameter");
    

    MfG



  • Ravel schrieb:

    Hi,

    es müsste in etwa so funktionieren:

    ShellExecute (NULL, "open", "C:\\Programme\\DeinProgramm.exe" , DeinParameter.c_str(), NULL, SW_SHOWNORMAL);
    

    Die Variable "DeinParameter" ist AnsiString und muss mit c_str() in char umgewandlt werden, wie es im Code beschrieben ist.

    Gruß
    ravel

    Gut, aber im total falschen Forum! (WinAPI + C++)

    Der Post von Probe-Nutzer zeigt auf wie es richtig geht (auch wenn dieses Beispiel nur auf M$-Systemen geht ;)).



  • danke für eure Hilfe!
    bei der system Funktion öffnet sich zu dem Programm auch noch ein Dos-Fenster. Kann man irgendwie vermeiden, dass sich dieses Fenster öffnet?
    ansonsten ist es genau das was ich gesucht habe.
    heimschmiede



  • Wenn du es mit ShellExecute() gemacht hast, dann bestimmt der letzte Parameter der Funktion wie das neue Fenster angezeigt wird. Ich vermute mal die Konstante heißt dann nicht SW_SHOWNORMAL sondern SW_SHOWHIDE o. ä. Frag einfach mal im WinAPI-Forum nach.



  • Hi,

    der Parameter heißt SW_HIDE aber wir meinten den system-Befehl. ->Gibt es da die Möglichkeit das DOS-Fenster zu verstecken?

    ravel



  • nimm am besten create process:

    //////////////////////////////////////////////////////////////// 
    // ERZEUGEN EINES PROZESSES 
    // Aufruf von NOTEPAD 
    
    #include <iostream.h> 
    #include <process.h> 
    #include <windows.h> 
    
    void main( void ) { 
    
        STARTUPINFO si;                
        PROCESS_INFORMATION pi; 
    
        ZeroMemory( &si, sizeof(si) );  // fülle Speicherbereich mit NULL 
        si.cb = sizeof(si);             // Grösse des Speicherbereichs 
        ZeroMemory( &pi, sizeof(pi) );  // fülle Speicherbereich mit NULL 
    
        bool ok = CreateProcess( NULL, "Notepad.exe", NULL, NULL,FALSE,  
                                 0, NULL, NULL, &si, &pi )     
    
        if (!ok)   cout <<  "CreateProcess failed." ;  
    
        // PROCESSINFORMATION abfragen: 
    
        cout << "Kind-Prozess ID: "            << pi.dwProcessId << endl;  
        cout << "Kind-Prozess HANDLE: "        << pi.hProcess << endl; 
        cout << "Kind-Prozess Thread-HANDLE: " << pi.hThread << endl; 
        cout << "Kind-Prozess Thread-ID: "     << pi.dwThreadId << endl; 
    
        // Wait until child process exits. 
        WaitForSingleObject( pi.hProcess, INFINITE ); 
    
        // Close process and thread handles.  
        CloseHandle( pi.hProcess ); 
        CloseHandle( pi.hThread ); 
    }
    

    viel spaß;-)

    cu


Anmelden zum Antworten