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
.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
A voir également:
- Prog C++ console qui ouvre un autre programme
- Comment ouvrir un fichier epub ? - Guide
- Programme demarrage windows 10 - Guide
- Ouvrir un fichier .bin - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Comment ouvrir un fichier docx ? - Guide
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
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 :
comme cela :
Mais une méthode plus portable et plus propre serait d'utiliser :
comme par exemple :
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 :
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 :
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à.
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à.