Prog C++ console qui ouvre un autre programme

Fermé
kessay Messages postés 2 Date d'inscription samedi 9 août 2008 Statut Membre Dernière intervention 13 mars 2011 - 13 mars 2011 à 21:45
.N Messages postés 25 Date d'inscription samedi 12 mars 2011 Statut Membre Dernière intervention 17 mars 2011 - 13 mars 2011 à 23:15
Bonjour,

Je souhaite creer une console application avec Dev-c++ donc en c++ qui :
-Ouvrirait un autre programme à l'ouverture de cette console, ex : VLC
-Paramètrerait ce programme, toujours pour l'exemple de VLC, lui ferait ouvrir un flux réseau à tel adresse ... ou mettre les sous titres de tel endroit ..

Entre autre, je ne connais pas la commande pour lancer un programme, et encore moins les commandes de paramétrage.

Merci d'avance, bien à vous, K.

1 réponse

.N Messages postés 25 Date d'inscription samedi 12 mars 2011 Statut Membre Dernière intervention 17 mars 2011 561
Modifié par .N le 14/03/2011 à 18:33
Si tu veux ouvrir un programme, sous Windows, en C/C++, tu peux très simplement utiliser :
int system ( const char * command );  

comme cela :
system ("start <nom_ou_path_du_programme> <arguments...>");  


Mais une méthode plus portable et plus propre serait d'utiliser :

int _spawnlp( int mode, const char *cmdname, const char *arg0, const char *arg1, ... const char *argn, NULL );  


comme par exemple :

#include <stdlib.h>  
#include <stdio.h>  
#include <string.h>  
#include <process.h>  

int main(int argc, char *argv[])  
{  
    if (argc < 2 || argc > 3)  
    {  
        printf("Error : wrong parameters count.\n");  
        return -1;  
    }  

    char *arg1 = (char*) malloc(sizeof(char) * (strlen(argv[1]) + 3));  
    strcpy(arg1, "\"");  
    strcat(arg1, argv[1]);  
    strcat(arg1, "\"");  
    if (argc > 2) _spawnlp( _P_NOWAIT, argv[1], arg1, argv[2], NULL);  
    else _spawnlp( _P_NOWAIT, argv[1], arg1, NULL);  
    return 0;  
}  


Si tu as des problème avec la commande MS-DOS «start», tu peux toujours compiler le code ci-haut, et utiliser l'exécutable pour créer un nouveau processus de cette facon :

system ("nom_de_l_exe <nom_ou_path_du_programme> <arguments...>");  

En prenant bien soin d'encadrer la liste d'arguments (celle destinée à disons VLC dans ce cas ci) de guillemets.
Si tu souhaites mettre des guillemets dans la liste d'arguments destinée au prog, tu peux utiliser ça :

#include <stdlib.h>  
#include <stdio.h>  
#include <string.h>  
#include <process.h>  

char *getSlashStr(const char* str, const char* slashChar);  

int main(int argc, char *argv[])  
{  
    if (argc < 2 || argc > 3)  
    {  
        printf("Error : wrong parameters count.\n");  
        return -1;  
    }  

    char *arg1 = (char*) malloc(sizeof(char) * (strlen(argv[1]) + 3));  
    strcpy(arg1, "\"");  
    strcat(arg1, argv[1]);  
    strcat(arg1, "\"");  
    if (argc > 2)  
    {  
        char slashChar[256] = {0};  
        slashChar['q']  =  '"';  
        slashChar['\\'] = '\\';  

        char *arg2 = getSlashStr(argv[2], slashChar);  

        _spawnlp( _P_NOWAIT, argv[1], arg1, arg2, NULL);  
    }  
    else _spawnlp( _P_NOWAIT, argv[1], arg1, NULL);  
    return 0;  
}  

char *getSlashStr(const char* str, const char* slashChar)  
{  
    int strSz=1;  
    for (int i=0; str[i]!='\0'; i++)  
        if (str[i] != '\\') strSz++;  
        else  
            if (slashChar[(int)str[i+1]]) strSz++;  

    char* returnValue = (char*) malloc(sizeof(char) * strSz);  
    if (!returnValue) return NULL;  

    int i;  
    for (i=0, strSz=0; str[i]!='\0'; i++)  
    {  
        if (str[i] != '\\')  
        {  
            returnValue[strSz] = str[i];  
            strSz++;  
        }  
        else  
        {  
            i++;  
            if ((returnValue[strSz] = slashChar[(int)str[i]])) strSz++;  
        }  
    }  

    returnValue[strSz] = '\0';  

    return returnValue;  
}  

en remplaçant les guillemets (attention il faut continuer d'utiliser de vrais guillemets pour encadrer le deuxième argument de l'exécutable) par «\q».

Bref, le «.exe» résultant de la compilation de ce dernier bout de code a pour deuxième argument ... une liste d'arguments.
Donc pour utiliser, disons avec comme nom de projet «procopen»

en console :
procopen.exe "C:\Program Files (x86)\ProgPath\prog.exe" "argument1 \qargument 2 avec des espaces, qui doit être encadré de guillemet\q argument3"

Voilà.
1