reiniciar una aplicación

Post Reply
User avatar
José Luis Sánchez
Posts: 484
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

reiniciar una aplicación

Post by José Luis Sánchez »

Hola:
Me gustaría saber si existe la manera de reiniciar una aplicación desde dentro de la misma. Hay situaciones como un cambio de idioma, coger datos de configuración,... que hacen necesario reiniciar la aplicación, y me gustaría saber como se hace.

Saludos,
User avatar
jesus
Posts: 21
Joined: Fri Oct 07, 2005 5:13 am
Location: Villajoyosa-Alicante(España)
Contact:

Es una forma poco ortodoxa pero me funciona

Post by jesus »

Es una forma poco ortodoxa pero me funciona,
donde quieras que se reinicie tu aplicación,
1º llamas a un exe que va a volver a llamar a tu aplicación
2º te sales de la aplicación

Espero te sirva,
Saludos

.... tu codigo de tu aplicacion ...
Ejecuta("LlamaNuevoExe.EXE )
ErrorLevel(3)
PostQuitMessage(0)
__Quit()
.... fin


--- LlamaNuevoExe.EXE ---
// LLamaNuevoExe.prg sólo tiene una función y es llamar a tu aplicación.
function LlamaNuevoExe()
Ejecuta("TuAplicación.EXE")
Return nil

-- Function Ejecuta --
*******************************
* Ejecutar Programas Externos *
*******************************
FUNCTION Ejecuta(cEjecuta, lSeparate)
LOCAL hInstance
DEFAULT lSeparate TO .F.
IF IsWinNT()
IF lSeparate
hInstance := WinExec("cmd.exe /c start /SEPARATE "+cEjecuta ,0)
ELSE
hInstance := WinExec("cmd.exe /c start "+cEjecuta ,0)
ENDIF
ELSE
hInstance := WinExec("Start "+cEjecuta ,0)
ENDIF
RETURN hInstance
Dpto.Desarrollos eTi
Jesús Díez González
Villajoyosa (Alicante)
User avatar
José Luis Sánchez
Posts: 484
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

re:

Post by José Luis Sánchez »

Gracias Jesús. Lo que quiero hacer es que el mismo exe se llame a si mismo. Lo que me propones está bien, pero no es lo que quiero hacer.

Saludos,
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Jose Luis,

Con WinExec() podrías volver a ejecutar el EXE, luego darle foco a la nueva aplicación y finalmente terminar la primera.

De un modo esquemático sería asi:

WinExec( <aplicacion> )
SetFocus( <ventana_principal_aplicacion_nueva_instancia> )
<ventana_principal>:End()

Asi terminaría la actual, y la nueva quedaría activa.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
José Luis Sánchez
Posts: 484
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España
Contact:

Post by José Luis Sánchez »

Antonio:

¿ y como le doy foco a la nueva instancia de la aplicación ?
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Puedes usar FindWindow() para encontrar el handle de la ventana.

Posiblemente habría que esperar un poco desde que arrancas la aplicación con WinExec() hasta que la ventana se crea y está visible.

Habría que revisar las opciones de WinExec() ó usar alguna función que aguarde un cierto tiempo (Sleep(), bucle con SysRefresh(), etc.)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply