COMO HACER QUE SE CIERRE SOLO MI PROGRAMA VFP

665 views
Skip to first unread message

RodoFito

unread,
Nov 19, 2018, 3:20:04 PM11/19/18
to Comunidad de Visual Foxpro en Español
Hola, amigos...
mi problema es el siguiente. necesito de su ayuda. Mi programa tiene un programa principal de donde llamo al menu (principal.prg) no es un formulario
yo necesito hacer que se cierre después de un tiempo de inactividad .. puedo hacer.. repito el menu no esta adentro de un formulario... muchas gracias a todos

Patricio Muñoz

unread,
Nov 19, 2018, 3:26:58 PM11/19/18
to publice...@googlegroups.com
Hola
Este es un código que ocupo desde hace mucho, no recuerdo de donde lo saqué pero funciona

PUBLIC tmrCheck
tmrCheck = NEWOBJECT("DetectActivity")

DEFINE CLASS DetectActivity as Timer
* Sólo detecta inactividad mientras está en este programa?
JustInThisApp = .F.
* Intervalo de inactividad tras el cual dispara OnInactivity (en segundos)
InactivityInterval = 60 * 15
*InactivityInterval = 60 * 1
* Intervalo cada el que chequea actividad
Interval      = 1000  
LastCursorPos = ""  
LastKeybState = ""  
LastActivity  = DATETIME() 
CursorPos     = ""     
KeybState     = ""  
IgnoreNext    = .T. 

PROCEDURE Init
DECLARE INTEGER GetKeyboardState IN WIN32API STRING @ sStatus
DECLARE INTEGER GetCursorPos IN WIN32API STRING @ sPos
DECLARE INTEGER GetForegroundWindow IN WIN32API
ENDPROC

PROCEDURE Destroy
CLEAR DLLS GetKeyboardState, GetCursorPos, GetForegroundWindow
ENDPROC

PROCEDURE Timer
WITH This
IF ! .CheckActivity()
* Si no hubo actividad veo si es tiempo de disparar OnInactivity
IF ! ISNULL(.LastActivity) AND ;
DATETIME() - .LastActivity > .InactivityInterval
.LastActivity = NULL && Prevengo disparo múltiple de OnInactivity
.OnInactivity()
ENDIF
ENDIF
ENDWITH
ENDPROC 

  * Chequeo si hay actividad
PROCEDURE CheckActivity
LOCAL lRet
WITH This
IF .JustInThisApp
IF GetForegroundWindow() <> _VFP.hWnd
          * Estoy en otro programa
RETURN lRet
ENDIF
ENDIF
.GetCurState()
IF (!.CursorPos == .LastCursorPos OR !.KeybState == .LastKeybState)
IF ! .IgnoreNext && La 1ra vez no ejecuto
lRet = .T. && Hubo actividad
.OnActivity()
.LastActivity = DATETIME()
ELSE
.IgnoreNext = .F. 
ENDIF
.LastCursorPos = .CursorPos
.LastKeybState = .KeybState
ENDIF
ENDWITH
    RETURN lRet   
ENDPROC

  * Devuelve el estado actual 
PROCEDURE GetCurState
LOCAL sPos, sState
WITH This
sPos   = SPACE(8)
sState = SPACE(256)
GetCursorPos (@sPos)
GetKeyboardState (@sState)
.CursorPos = sPos  
.KeybState = sState
ENDWITH
ENDPROC  
  
PROCEDURE OnInactivity
IF MESSAGEBOX("El equipo lleva varios minutos sin usarse. Se cerrará la sesión del sistema XXXXXXXXX",4+64+4096,"Cerrando sesión",15000) <> 7
_screen.Tag = ""
If _Screen.FormCount> 0
For i = _Screen.FormCount To 1 STEP -1
_Screen.Forms[i].destroy
_Screen.Forms[i].release
ENDFOR
ENDIF
ENDIF
ENDPROC

PROCEDURE OnActivity
ENDPROC
ENDDEFINE



Bendiciones
--
Saludos

Patricio Muñoz
Pro&Tech
Analista en Sistemas

Carlos Alfaro

unread,
Nov 19, 2018, 4:20:34 PM11/19/18
to publice...@googlegroups.com

Que interesante.

 

Buen día.

 

 

Carlos Alfaro

RodoFito

unread,
Nov 19, 2018, 4:31:31 PM11/19/18
to Comunidad de Visual Foxpro en Español
gracias amigo lo pruebo

RodoFito

unread,
Nov 19, 2018, 4:40:04 PM11/19/18
to Comunidad de Visual Foxpro en Español
amigo , que es esto que valores pongo aca
GetCursorPos (@sPos)
GetKeyboardState (@sState

Víctor Hugo Espínola Domínguez

unread,
Nov 19, 2018, 4:45:32 PM11/19/18
to publice...@googlegroups.com
Ya están asignados los valores, ver 2 líneas arriba.
unaFuncion(@Parametro)     && @ indica que el parámetro es usado por referencia, la función puede cambiarle su valor

Saludos,
Víctor.
Lambaré - Paraguay.


RodoFito

unread,
Nov 20, 2018, 4:56:38 AM11/20/18
to Comunidad de Visual Foxpro en Español
Gracias !!! anda de diez, lo probe, lo que me pasa es que si el programa queda en el menu desplegable ahi no me funciona, o si me queda dentro de un 
MESSAGEBOX. no me anda , pero si continuo luego que muestra el messagebox . y hago click en el boton salir de un formulatio ahi sale.. es como si espera
en el messagebox no me funciona.. Agradecerte amigo por todo.

RodoFito

unread,
Nov 20, 2018, 5:04:06 AM11/20/18
to Comunidad de Visual Foxpro en Español
Gracias Amigo, ya esta anda todo bien graciasssssssssssssssssssssssssssssss

Patricio Muñoz

unread,
Nov 20, 2018, 8:19:19 AM11/20/18
to publice...@googlegroups.com
Recién vi los correos

Que bueno que hayas logrado lo que necesitabas y que hayas podido resolver la forma y el dónde se debe implementar el código

Bendiciones

Norberto Mario Alvarez

unread,
Nov 24, 2018, 7:57:39 AM11/24/18
to Comunidad de Visual Foxpro en Español
Hola Gente, estoy viendo esto y la verdad me interesa muchísimo, además de fantástico. Yo tengo un sistema donde ingreso mediante a un PGR, de aquí me deriva a un menú y del mismo a distintos formularios. Mi pregunta es la siguiente, donde pongo el proceso que verifica la Inactividad y como lo invoco, ya que puede estar abierto cualquier formulario invocado desde el menú, ante todo perdón por mi ignorancia, pero es uno de los grandes problemas que tengo, es que dejan siempre abierto el sistema y no puedo hacer cambios remotos. Desde ya muchas gracias.

Norberto Alvarez

RodoFito

unread,
Nov 28, 2018, 6:08:10 PM11/28/18
to Comunidad de Visual Foxpro en Español
Hola, antes del menu , pones do cerrar.prg y listo anda de 10 saludos

MAC HOWARD

unread,
Nov 28, 2018, 6:27:23 PM11/28/18
to publice...@googlegroups.com
Hola. 

Revisa esto. 
Imagen1.png
inactividad.prg

Norberto Mario Alvarez

unread,
Dec 1, 2018, 8:10:15 AM12/1/18
to Comunidad de Visual Foxpro en Español
Muchas Gracias !!!!!!!!


Norberto Alvarez

El lunes, 19 de noviembre de 2018, 17:20:04 (UTC-3), RodoFito escribió:
Reply all
Reply to author
Forward
0 new messages