PDA

Visualizza la versione completa : [C++] Lanciare più file eseguibili in sequenza


freetom
13-03-2011, 19:43
Posso richiamarli in un file .cpp in qualche modo?

Se si poi compilerei quest'ultimo che li richiamerebbe tutti...

Grazie

:ciauz:

Laikius91
13-03-2011, 22:32
Non ho molto esperienza di C++ sinceramente... ma con il C nelle librerie standard (stdio.h) hai la funzione:



system("comando");


che esegue da terminale ciò che viene passato in "comando"!

freetom
14-03-2011, 13:20
Originariamente inviato da Laikius91
Non ho molto esperienza di C++ sinceramente... ma con il C nelle librerie standard (stdio.h) hai la funzione:



system("comando");


che esegue da terminale ciò che viene passato in "comando"!


Se fosse così anche in c++ basterebbe ad es. mettere nel codice .cpp che richiama i tre .exe :


system("1.exe");
system("2.exe");
system("3.exe");

???

Grazie!



:ciauz:

ShaleN
14-03-2011, 18:04
Esatto, ma la system è deprecata per svariati motivi.

Ho sentito che puoi usare anche la API ShellExecute, ma non usando spesso il C++ non so quale sia la soluzione migliore.

:ciauz: :ciauz:

freetom
14-03-2011, 20:51
Originariamente inviato da ShaleN
Esatto, ma la system è deprecata per svariati motivi.

Ho sentito che puoi usare anche la API ShellExecute, ma non usando spesso il C++ non so quale sia la soluzione migliore.

:ciauz: :ciauz:

Non si fermasse.. al 20° exe...

Mi spiego meglio... sperando che qualcuno mi sappia dare la spiegazione della non esecuzione dei restanti exe in cascata:




#include <windows.h>
#include <stdlib.h>

using namespace std;

int main() {

ShellExecute(NULL,NULL,"1.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"2.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"3.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"4.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"5.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"6.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"7.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"8.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"9.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"10.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"11.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"12.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"13.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"14.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"15.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"16.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"17.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"18.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"19.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"20.exe",NULL,"cartella",SW_MAXIMIZE); //arriva ad eseguire fino a qui...
ShellExecute(NULL,NULL,"SCREMA1.exe",NULL,"cartella",SW_MAXIMIZE);//il resto non lo esegue...
ShellExecute(NULL,NULL,"SCREMA2.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"SCREMA3.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"SCREMA4.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"SCREMA5.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"UNISCITUTTIGLISCREMATI.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"TROVAONOAMBATARILEVATA.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"SOLOPRESENZE0.exe",NULL,"cartella",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"SCREMATURAFINALISSIMA.exe",NULL,"cartella",SW_MAXIMIZE);

}




Tutto bene fino al 20° exe poi il resto non lo considera... :stordita:

:confused:

Celebron
14-03-2011, 21:02
debugga

controlla il return value delle singole funzioni (anche stampandolo ogni volta a video)

return values (http://msdn.microsoft.com/en-us/library/bb762153(v=vs.85).aspx)

freetom
14-03-2011, 21:34
Originariamente inviato da Celebron
debugga

controlla il return value delle singole funzioni (anche stampandolo ogni volta a video)

return values (http://msdn.microsoft.com/en-us/library/bb762153(v=vs.85).aspx)

Mi scriveresti il codice con returnvalues così che ti possa postare il debug?

Grazie

:ciauz:

ps: Gli exe che lo shellexecute non mi starta se cliccati singolarmente funzionano benissimo... quindi sembra proprio che shellexecute non possa eseguire più di un tot di exe... Potrebbe essere? Ci potrebbe essere un parametro che condiziona il tempo di esecuzione di shellexecute?

:confused:

Celebron
14-03-2011, 21:37
non ho ben capito cosa chiedi
comunque nella pratica ti basta mettere un variabile int che riceve il valore di ogni shellexecute e poi te lo stampi a video (o alternativamente, usando il debuggar, controlli passo passo quel valore)

nota: If the function succeeds, it returns a value greater than 32

comunque ti sto parlando da profano, nel senso che non ho mai usato questa funzione

freetom
14-03-2011, 22:48
#include <windows.h>
#include <stdlib.h>

using namespace std;

int main() {

ShellExecute(NULL,NULL,"STARTA1.exe",NULL,"fscommand",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"STARTA2.exe",NULL,"fscommand",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"STARTA3.exe",NULL,"fscommand",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"STARTA4.exe",NULL,"fscommand",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"STARTA5.exe",NULL,"fscommand",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"STARTA6.exe",NULL,"fscommand",SW_MAXIMIZE);


}



Se clicco singolarmente i 6 file .exe tutto ok.. ognuno funziona a meraviglia mentre se eseguo
il file .exe che li richiama in sequenza con shellExecute STARTA5.exe e STARTA6.exe non vengono minimamente considerati...

:dhò:

freetom
14-03-2011, 23:08
Originariamente inviato da freetom



#include <windows.h>
#include <stdlib.h>

using namespace std;

int main() {

ShellExecute(NULL,NULL,"STARTA1.exe",NULL,"fscommand",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"STARTA2.exe",NULL,"fscommand",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"STARTA3.exe",NULL,"fscommand",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"STARTA4.exe",NULL,"fscommand",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"STARTA5.exe",NULL,"fscommand",SW_MAXIMIZE);
ShellExecute(NULL,NULL,"STARTA6.exe",NULL,"fscommand",SW_MAXIMIZE);


}




Se clicco singolarmente i 6 file .exe tutto ok.. ognuno funziona a meraviglia mentre se eseguo
il file .exe che li richiama in sequenza con shellExecute STARTA5.exe e STARTA6.exe non vengono minimamente considerati...

:dhò:


Ho risolto con la funzione Sleep(10000) tra un shellexecute e l'altro :D

Loading