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);
}
