C/Visual C - Visual C++ 6 - ShellExecuteEx

 
Vista:

Visual C++ 6 - ShellExecuteEx

Publicado por Alvaro Mouat V. (8 intervenciones) el 28/02/2002 20:48:07
Hola ...
Necesito hacer que de algun modo la función ShellExecuteEx se quede esperando hasta que el programa al que se llamó termine.
Hasta ahora he seteado en la estructura SHELLEXECUTEINFO el campo fMask con y sin el valor SEE_MASK_NOCLOSEPROCESS, esperando que cuando este valor no esté seteado la función espere que el programa termine, pero esto no ocurre.
El código es el siguiente:
SHELLEXECUTEINFO eInfo;
memset(&eInfo, 0, sizeof(SHELLEXECUTEINFO));
eInfo.cbSize = sizeof(SHELLEXECUTEINFO);
eInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
// He probado con y sin esta linea ...
eInfo.hwnd = NULL;
eInfo.lpVerb = _T("open");
memset(par, 0, MAX_LOADSTRING);
AddDobleQuotes(params, par);
// Añado dos (" ) por cada una que encuentre.

eInfo.lpFile = program;
eInfo.lpParameters = par;
eInfo.nShow = SW_SHOWNORMAL;
if (ShellExecuteEx(&eInfo) == 0) {
//Error. no se ejecuto el programa.
}
else {
//El programa se ejecuto.
}

Alguien puede ayudarme ?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Visual C++ 6 - ShellExecuteEx

Publicado por Oscar (114 intervenciones) el 28/02/2002 23:59:46
Lo ejecutas con ese flags y con el Handle del proceso que recibiste en la estructura llamas a la API GetExitCodeProcess y esperas que te mande un codigo distinto a STILL_ACTIVE.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Visual C++ 6 - ShellExecuteEx

Publicado por Alvaro Mouat V. (8 intervenciones) el 08/03/2002 08:12:57
Gracias, pero encontre una solución más adecuada.
al utilizar GetExitCodeProcess y esperar que mande un codigo distinto de STILL_ACTIVE, estas utilizando una tecnica que se llama "Espera Ocupada", La cual ocupa muchos recursos. (El procesador sigue ocupado en el programa)
Utilizando CreateProcess he llamado a la ejecución del programa, y luego utilizo la función WaitForSingleObject para saber cuando ha finalizado.
Esta función "Duerme" al proceso que llamo a la ejecución del programa hasta que el programa termina.
Además tiene la posibilidad de considerar un TIMEOUT (en su segundo parámetro) que puedes setear a INFINITE, para decir que espere eternamente, o hasta que se mate al programa, o hasta que se caiga windows, o se acabe el mundo, etc ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar