Ejecutar otra aplicación

Post Reply
User avatar
Sebastián Almirón
Posts: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Ejecutar otra aplicación

Post by Sebastián Almirón »

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
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post by karinha »

YA INTETASTES CON UN ARCHIVO.BAT??
João Santos - São Paulo - Brasil
User avatar
Sebastián Almirón
Posts: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Post by Sebastián Almirón »

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
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post by karinha »

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
User avatar
JmGarcia
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Post by JmGarcia »

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

Post by Antonio Linares »

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: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Code: Select all

// 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
Sebastián Almirón
Posts: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Post by Sebastián Almirón »

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
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Post by cuatecatl82 »

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

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
Post Reply