reiniciar una aplicación

reiniciar una aplicación

Postby José Luis Sánchez » Fri Oct 28, 2005 10:19 pm

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
José Luis Sánchez
 
Posts: 540
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Es una forma poco ortodoxa pero me funciona

Postby jesus » Sat Oct 29, 2005 8:11 am

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
jesus
 
Posts: 21
Joined: Fri Oct 07, 2005 5:13 am
Location: Villajoyosa-Alicante(España)

re:

Postby José Luis Sánchez » Sun Oct 30, 2005 4:03 pm

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
José Luis Sánchez
 
Posts: 540
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Postby Antonio Linares » Sun Oct 30, 2005 6:42 pm

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
Antonio Linares
Site Admin
 
Posts: 41416
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby José Luis Sánchez » Sun Oct 30, 2005 7:18 pm

Antonio:

¿ y como le doy foco a la nueva instancia de la aplicación ?
User avatar
José Luis Sánchez
 
Posts: 540
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Postby Antonio Linares » Sun Oct 30, 2005 7:47 pm

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
User avatar
Antonio Linares
Site Admin
 
Posts: 41416
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 26 guests

cron