Ejecutar un programa que no he hecho yo en uno hecho por mi
Hola:
Programo en C++ Builder y necesito ejecutar un programa que no he hecho yo como una ventana hija dentro del programa que estoy programando en c++ builder. Por ejemplo, necesito ejecutar la calculadora de windows en mi programa como ventana hija, no como aplicaci贸n aparte. ¿Alguien me puede ayudar?
Muchas gracias.
Programo en C++ Builder y necesito ejecutar un programa que no he hecho yo como una ventana hija dentro del programa que estoy programando en c++ builder. Por ejemplo, necesito ejecutar la calculadora de windows en mi programa como ventana hija, no como aplicaci贸n aparte. ¿Alguien me puede ayudar?
Muchas gracias.
Realmente no s茅 si es posible, pero f铆jate en la ayuda de Delphi o C++ Builder (Windows SDK) sobre la API ShellExecute.
Esta API de Windows ejecuta y abre documentos...
Esta API de Windows ejecuta y abre documentos...
Mira este C贸digo es dificilisimo de encontrar, me cost贸 mucho trabajo porque en la red no encontr茅 ninguno para c++ builder as铆 que lo adapt茅... Este Funciona por lo menos en Builder5.
------------------------------------------------------------------------
void CreaProcesoHijoyEsperaqueTermine(const AnsiString& Ejecuta)
{
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;
// Cargar los miembros de la Estructura STARTUPINFO
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.lpReserved = NULL;
siStartInfo.lpReserved2 = NULL;
siStartInfo.cbReserved2 = 0;
siStartInfo.lpTitle = Ejecuta.c_str();
siStartInfo.lpDesktop= NULL;
siStartInfo.dwFlags = STARTF_USESHOWWINDOW; //Permite Activar modo de Visualizacion de la aplication
siStartInfo.wShowWindow=SW_HIDE;//Modo de Visualizaci贸n de la Aplicacion
// Creaci贸n del Proceso Hijo
CreateProcess(
NULL,
Ejecuta.c_str(), //Lineas de Comando
NULL, // Atributo para la seguridad del proceso
NULL, // primary thread security attributes
false, // handles are inherited
NORMAL_PRIORITY_CLASS,// Creaci贸n de flags o Tipo de Prioridad de la Aplicaci贸n
NULL, // use parent's environment
NULL, // use parent's current directory
&siStartInfo, // puntero a STARTUPINFO
&piProcInfo); // Informaci贸n del Proceso
// Esperar hasta que el proceso hijo Termine y contin煤a con el padre (esto sirve muchisimo puesto que genera llamado a aplicaciones Externas de forma S铆ncrona)
DWORD rc = WaitForSingleObject(
piProcInfo.hProcess, // Proceso handle
INFINITE);
CloseHandle(piProcInfo.hProcess);
CloseHandle(piProcInfo.hThread);
}
------------------------------------------------------------------------
void CreaProcesoHijoyEsperaqueTermine(const AnsiString& Ejecuta)
{
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;
// Cargar los miembros de la Estructura STARTUPINFO
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.lpReserved = NULL;
siStartInfo.lpReserved2 = NULL;
siStartInfo.cbReserved2 = 0;
siStartInfo.lpTitle = Ejecuta.c_str();
siStartInfo.lpDesktop= NULL;
siStartInfo.dwFlags = STARTF_USESHOWWINDOW; //Permite Activar modo de Visualizacion de la aplication
siStartInfo.wShowWindow=SW_HIDE;//Modo de Visualizaci贸n de la Aplicacion
// Creaci贸n del Proceso Hijo
CreateProcess(
NULL,
Ejecuta.c_str(), //Lineas de Comando
NULL, // Atributo para la seguridad del proceso
NULL, // primary thread security attributes
false, // handles are inherited
NORMAL_PRIORITY_CLASS,// Creaci贸n de flags o Tipo de Prioridad de la Aplicaci贸n
NULL, // use parent's environment
NULL, // use parent's current directory
&siStartInfo, // puntero a STARTUPINFO
&piProcInfo); // Informaci贸n del Proceso
// Esperar hasta que el proceso hijo Termine y contin煤a con el padre (esto sirve muchisimo puesto que genera llamado a aplicaciones Externas de forma S铆ncrona)
DWORD rc = WaitForSingleObject(
piProcInfo.hProcess, // Proceso handle
INFINITE);
CloseHandle(piProcInfo.hProcess);
CloseHandle(piProcInfo.hThread);
}
