Hola gente, :)
Alguien me puede dar una idea sobre este asunto? a ver... :)
Tengo dos ejecutable.
El ejecutable 1 con un ShellExecute(... ) llama al ejecutable 2. Cuando este ultimo (el ejecutable 2) termina su tarea, necesito que mande de vuelta un parametro al ejecutable 1, avisando así que ha terminado.
Realmente mio ojectivo es que el ejecutable 1 se entere "de alguna forma" que el ejecutable 2 ha terminado, y de paso a ver si es posible enviarle un parametro del 2 al 1, tambien.
El ejecutable 1 está en modo WIN32 GUI, y el ejecutable 2 en WIN32 Consola.
Una idea, porfa.. algo sencillo heeee?? No me lieis con DLL etc.. etc.. algo sencillito, porfa :rolleyes:
Saludos.
Busca informacion sobre sincronización entre procesos.
Gracias ctlon :)
lo he ido mirando. Y no se si estoy a tal altura de conocimientos.... :rolleyes:
Alguien anda por ahí con alguna otra idea sencilla sencilla... ???
Es que tampoco soy un "fiera" programando.. jajaja hago lo que puedo ;)
Saludos :)
La forma mas sencilla que se me ocurre ahora mismo es:
- Usar ShellExecuteEx (con SEE_MASK_NOCLOSEPROCESS en fMask) asi en hProcess tenes el HANDLE al proceso creado (cuando cree uno claro).
- Esperar el HANDLE con WaitForSingleObject e INFINITE, cuando retorne es que el proceso termino.
- Obtener el valor de salida del proceso con GetExitCodeProcess.
Obviamente tenes que hacer un return valor; util en el 2do ejecutable.
PD. Usa la MSDN para buscar referencias.
Hay.. cuando se dicen las concomitancias de las ideas.. ;D
Encontré un code en el foro "ProcessCheck (char *szProcess)" y lo he adaptado. :silbar:
Lo mio es una chapuza peró "prometo" mirar, con más calma, tema WaitForSingleObject e INFINITE (siempre hay que ir a más) :)
Dejo code de ejemplo como idea para otros.
1) No se pasan parametros peró por lo menos se avisa que el proceso ha terminado.
2) Una idea sencilla para pasar pasar parametros: es un file en binario (o txt) de intercambio de informacion entre los dos ejecutables. ;)
// *****************************************************************************
void Esperameeeeeeee (void)
{
while( 1 ) { Sleep( 25 ); if ( !ProcessCheck( "tc45i.exe" ) ) break; }
}
// *****************************************************************************
BOOL ProcessCheck (char *szProcess)
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
pe32.dwSize = sizeof( PROCESSENTRY32 );
if (!Process32First( hProcessSnap,&pe32 ) ) CloseHandle( hProcessSnap );
do {
if ( !strcmp( pe32.szExeFile, szProcess ) ) return TRUE;
} while( Process32Next( hProcessSnap, &pe32 ) );
CloseHandle( hProcessSnap );
return FALSE;
}
Un gracias de nuevo a ctlon y a Eternal Idol. ;-)
Saludos :)
hey que hay de nuevo... bueno al grano... pensaba en lo q dices y me vino la idea que si en estos casos tambien ¿se pudiera utilizar tuberias y redireccionamiento?
Si, se puede. En procesos relacionados y en el mismo host podes usar anonymous pipes. En procesos no relacionados y a través de una red podes usar named pipes. En ambos casos necesitas dos en caso que quieras transmitir información en ambas direcciones.
Para mas información busca sobre IPC.
Se vale no hacer doble post.
Saludos