PDA

View Full Version : [C++] Eseguire programma esterno


ciroshare
20-04-2009, 20:11
Salve a tutti. Ho un programma scritto in visual c++. Avrei l'esigenza di mandare in esecuzione un programma .exe esterno. Come posso fare?

71104
20-04-2009, 21:13
includi <cstdlib>, <cstdio> e chiama la funzione system

DanieleC88
20-04-2009, 21:43
Oppure puoi appoggiarti alle funzionalità offerte dal sistema operativo (ShellExecute() su Windows e fork() + exec*() su Unix).

71104
20-04-2009, 22:23
ShellExecute é piu generica, serve ad "aprire" un file come se ci si cliccasse sopra due volte col mouse nella shell grafica; volendo usare le API io userei CreateProcess, o WinExec per semplicitá.

DanieleC88
20-04-2009, 22:29
Vabbe', non è il mio campo... :Prrr:

ciroshare
21-04-2009, 08:11
Grazie a tutti mi informerò su queste modalità... eventualmente passerò di qui per eventuali dubbi :)

Ciao!

ciroshare
21-04-2009, 19:18
Ciao ho implementato il tutto con la funzione system()... ho notato che quando chiamo questa il mio eseguibile si apre una finestra di comando... sapete se c'è un modo per nascondere questa visualizzazione?

DanieleC88
21-04-2009, 19:21
Con le API di Win32 citate da 71104. :)

ciroshare
22-04-2009, 08:08
Ciao ho creato il processo con la CreateProcess ma la finestra console si apre ugualmente... devo forse impostare qualche parametro?

ciroshare
22-04-2009, 09:25
Posto la soluzione, se qualcuno in futuro ne avesse bisogno ;)

Ci sono riuscito chiamando in questo modo:

CreateProcess(
NULL, // No module name (use command line)
path, // path to execution file
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
CREATE_NO_WINDOW, // creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure

Il trucco è quindi inmpostare il creation flags a CREATE_NO_WINDOW