Ejecutar otra aplicación

Ejecutar otra aplicación

Postby Sebastián Almirón » Wed Dec 03, 2008 10:30 am

Hola a todos.

Tengo una aplicación (aplicación 1), que en un proceso nocturno y desatendido, tiene que ejecutar otra (aplicación 2) para hacer unos procesos de mantenimiento.

Mi problema es que ambas aplicaciones están en el servidor y en la misma carpeta y este normalmente está con el salvapantallas protegido por contraseña, y hasta que no se quita el salvapantallas la aplicación 2 no se ejecuta.

El proceso es mas o menos así:

nhandle := fcreate('CIERRE.XXX') //Se crea el fichero para emitir la orden de cierre de la aplicación 2
fclose(nhandle)
MsgWait('Cerrando Aplicacion 2 en todos los terminales','Proceso de mantenimiento',300) //Se espera 5 minutos de margen para que la Aplicación 2 se cierre, aunque se cierra en 3 minutos a partir de la creación del fichero CIERRE.XXX
winexec('APLICACION2 PRONOCTU')

Tal y como está escrito, cuando quito el salvapantallas, lleve el tiempo que lleve el mismo, me encuentro con el MsgWait en pantalla que desaparece tras cinco minutos de haber quitado el salvapantallas. Es como si el tiempo no contase cuando está el salvapantallas. Bien eso lo puedo solucionar con un Mensage NOWAIT y un bucle de espera.

Mi problema es que pasa lo mismo con el winexec(), que hasta que no quito el salvapantallas no se ejecuta. He probado con Waitrun() y con ShellExecute() y pasa lo mismo. Si no tengo puesto el salvapantallas la aplicación 2 se ejecuta correctamente y ella sola se cierra tras realizar los procesos.

¿ Hay alguna manera de lanzar una aplicación desde otra y que se ejecute aunque esté el salvapantallas ?

Espero haberme explicado, Saludos
User avatar
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Postby karinha » Wed Dec 03, 2008 11:22 am

YA INTETASTES CON UN ARCHIVO.BAT??
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7824
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby Sebastián Almirón » Wed Dec 03, 2008 12:23 pm

Hola, si también lo he intentado, incluso con un RUN fichero.bat (por desesperacion), pero pasa lo mismo.

El problema parece ser que con el salvapantallas todas las ordenes de ejecución de otros programas, o los msgwait(), se quedan pendientes a que se quite el salvapantallas.
User avatar
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Postby karinha » Wed Dec 03, 2008 12:45 pm

MsgWait('Cerrando Aplicacion 2 en todos los terminales','Proceso de mantenimiento',300)

Porque no cambias para un dialogo?? ó usas un MSGRUN()??
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7824
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby JmGarcia » Wed Dec 03, 2008 2:51 pm

Sebastián Almirón wrote:...El problema parece ser que con el salvapantallas todas las ordenes de ejecución de otros programas, o los msgwait(), se quedan pendientes a que se quite el salvapantallas.

Y si te haces tu propio salvapantallas...
Un SCR no es mas que un EXE renombrado.
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Postby Antonio Linares » Wed Dec 03, 2008 10:13 pm

Podrias no usar salvapantallas, y hacer que tu propia aplicación simule uno.

En estos foros hemos comentado como hacerlo.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Wed Dec 03, 2008 10:23 pm

Code: Select all  Expand view
// How to create a screensaver that will be executed when a GET is not used for some time

#include "FiveWin.ch"

static nTime := 0

function Main()

   local oDlg, oSay, oGet, cTest := Space( 10 )

   DEFINE DIALOG oDlg TITLE "Test"

   @ 0.5, 8 SAY oSay PROMPT "Elapsed time: " + AllTrim( Str( nTime ) ) + " secs."
   
   @ 3, 7 GET oGet VAR cTest PASSWORD
   
   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT BuildTimer( oDlg, oSay, oGet )

return nil

function BuildTimer( oDlg, oSay, oGet )

   local oTmr
   
   DEFINE TIMER oTmr OF oDlg ;
      ACTION ( nTime++, oSay:Refresh(), If( nTime > 14, ScreenSaver(),)) INTERVAL 1000

   ACTIVATE TIMER oTmr
   
   oGet:bKeyDown = { | nKey | nTime := 0, nKey }
   
return nil   

function ScreenSaver()

   static oDlg

   nTime = 0

   if oDlg == nil

      ShowWindow( FindWindow( "Shell_TrayWnd", "" ), 0 ) // Taskbar
      ShowWindow( FindWindow( "Button", "Start" ), 0 ) // Vista round button

      DEFINE DIALOG oDlg STYLE WS_VISIBLE COLOR "W/B" SIZE GetSysMetrics( 0 ), GetSysMetrics( 1 )
   
      @ 10, 10 SAY "This is a screensaver" COLOR "W/B"
   
      oDlg:bKeyDown = { || oDlg:End() }
   
      ACTIVATE DIALOG oDlg ;
         ON CLICK oDlg:End()

      ShowWindow( FindWindow( "Shell_TrayWnd", "" ), 1 )
      ShowWindow( FindWindow( "Button", "Start" ), 1 )
         
      oDlg = nil
      nTime = 0
   endif     
   
return nil     
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Sebastián Almirón » Wed Dec 10, 2008 8:47 am

Bueno, gracias a todos, ya lo he solucionado.

El problema en si no era la ejecución de programas sino los dialogos. A medida que iba ejecutando procesos y para saber por donde iba mostraba unos MsgRun y otros dialogos que eran los que realmente me dejaban paralizado el programa cuando el salvapantallas estaba en ejecución. La solución ha sido eliminar cualquier dialogo que pudiera aparecer durante el proceso.

Saludos y gracias de nuevo.
User avatar
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Postby cuatecatl82 » Wed Dec 10, 2008 4:52 pm

Maestro Antonio:

He probado el ejemplo de como aplicar una screensaver en fw, y funciona a la perfección, pero me surge una duda, es posible cerrar el screensaver al mover el mouse y controlar la sensibilidad del movimiento, lo he intentado con

Code: Select all  Expand view
oDlg:bMMoved  = { |nRow, nCol, nFlags| msginfo("Se movio"), oDlg:end() }


Pero siempre aparece el mensaje sin poder hacer nada..

Creo que me falta revisar más, pero la falta de tiempo me lo impide.
:oops: :x
De todas maneras estoy haciendo algunas pruebas para implementarlo en mis aplicaciones, pero solo me falta este pequeño detalle. Creo que ando algo perdido,

Si alguien pudiera darme una idea, se lo agradeceria bastante..

Saludos.. :lol: :o
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México


Return to FiveWin para Harbour/xHarbour

Who is online

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