Pasar parametros entres dos ejecutable.

Iniciado por codeliber, 18 Mayo 2010, 13:18 PM

0 Miembros y 1 Visitante están viendo este tema.

codeliber

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.



No quiero ser un pez, por eso necesito que me enseñes a pescar. :)

bizco

Busca informacion sobre sincronización entre procesos.

codeliber

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  :)


No quiero ser un pez, por eso necesito que me enseñes a pescar. :)

Eternal Idol

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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

codeliber

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 :)
No quiero ser un pez, por eso necesito que me enseñes a pescar. :)

MessageBoxA

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 LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++

Littlehorse

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
An expert is a man who has made all the mistakes which can be made, in a very narrow field.