Hola a todos, esperando que se encuentren muy bien,
Tengo establecido un tiempo maximo en mi aplicacion para que el usuario este inactivo, es decir sin ejecutar nada en la PC, es decir sin tocar el teclado ni el raton. Si esto sucede, aparece un msgAlert() indicando que el tiempo se ha cumplido y la sesion expiró, hasta ahi todo bien, como se muestra en la imagen:
https://datanet.space/fw/aw1.jpg
El problema se presenta cuando la aplicacion esta minimizada. Al vencerse el tiempo, el msgalert() y la ventana se muestran independientes, y al querer maximizar, solo se levanta aquella en que se haga click.
Lo que quiero es que al hacer click bien sea en el msgAlert() o en la ventana, ambos se levanten. Ace dejo un video para graficar lo que sucede.
https://datanet.space/fw/Aw3.mp4
Otra cosa es que para controlar el tiempo, uso la funcion sysIdleSecs() pero la misma controla todo el equipo y quisiera que funcionara solo dentro de mi aplicacion si es posible. Es decir, si se minimiza la aplicacion y el usuario se va por decir a word y tarda alli mas de el tiempo establecido, ese tiempo mi sistema no lo toma en cuenta, es decir no se cierra, solo se cierra cuando el usuario no hace absolutamente nada en la PC.
Alguna idea de como hacerlo u otra forma que funcione como quiero?
msgAlert se comporta independiente
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
msgAlert se comporta independiente
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
- karinha
- Posts: 7910
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: msgAlert se comporta independiente
Code: Select all | Expand
// tinativo.prg - By William Adami
// exemplo do uso da classe Tinativo
// Apos um tempo de inatividade do mouse
// e do teclado chama uma funcao qualquer.
#include "fivewin.ch"
STATIC oWnd
//************
FUNCTION Main()
LOCAL nTempo_espera, cNome_funcao, lTimercontinua
// Tempo a ser esperado ate chamar a funcao
// -> 1 hora tem 3600 segundos.
nTempo_espera := 10 // segundos.
// nome da funcao a ser chamada quando
// chegar no tempo de espera
cNome_funcao := "LOGOFF()"
// se apos executar a funcao , continua
// monitorando a inatividade do mouse e teclado.
lTimercontinua := .F.
define window oWnd title "Teste de teclado e mouse"
activate window oWnd ;
ON INIT tinativo():new( nTempo_espera, cNome_funcao, lTimerContinua )
RETURN NIL
FUNCTION LOGOFF()
// msgalert( "AQUI ENTRA SUA FUNCAO DE LOGOFF !", "AVISO" )
IF MsgYesNo( OemToAnsi( "ATEN€ÇO USUµRIO: " )+CRLF+ ;
OemToAnsi( "PROTEJA OS BANCOS DE DADOS DO PROGRAMA." )+CRLF+ ;
OemToAnsi( "SE NÇO ESTIVER USANDO O WINORCAM.EXE, " )+CRLF+ ;
OemToAnsi( "DESLIGUE-O PARA NÇO CORRER RISCOS. " )+CRLF+ ;
OemToAnsi( "POSSO DESLIGAR O PROGRAMA? <S> ou <N>??" ), ;
OemToAnsi( "AVISO PARA DESLIGAR O WINORCAM.EXE... " ) )
//--Fecha o Programa Definitivamente
LIBERA_TUDO() // ESTA EM WINORCAM.PRG
// QUIT
ENDIF
RETURN NIL
// tinativo.prg
#include "fivewin.ch"
CLASS TINATIVO
DATA nTimeInpAntes
DATA nTimeInpDepois
DATA cTimeAtu
DATA nTempo
DATA oTimerTime
DATA cFunc
DATA lContinuar
METHOD NEW( nTime, cFuncao, lContinua ) CONSTRUCTOR
METHOD ver_tempo()
ENDCLASS
METHOD new( ntime, cFuncao, lContinua ) CLASS TINATIVO
::cfunc := cfuncao
::ntempo := ntime
::lContinuar := lContinua
::oTimerTime := TTimer():New( 1000, { || ::VER_TEMPO() } )
::oTimerTime:Activate()
::cTimeAtu := time()
::nTimeInpAntes := getInputState() // 0 = erro
RETURN self
METHOD VER_TEMPO CLASS TINATIVO
LOCAL AUX
::nTimeInpDepois := getInputState()
IF ( ::nTimeInpDepois - ::nTimeInpAntes ) > 0
::nTimeInpAntes := getInputState()
::cTimeAtu := time()
ENDIF
IF ( CONVTIME( time() ) - CONVTIME( ::cTimeAtu ) ) > ::ntempo
::oTimerTime:DeActivate()
aux := ::cfunc
// aqui executa a funcao
&aux
if ::lContinuar
::oTimerTime:Activate()
::cTimeAtu := time()
ENDIF
ENDIF
RETURN NIL
FUNCTION CONVTIME( ZZ )
LOCAL Z
Z := ( VAL( LEFT(ZZ,2 ) ) * 360 ) + ( VAL( SUBSTR(ZZ,4,2 ) ) * 60 ) + ;
VAL( RIGHT( ZZ,2 ) )
RETURN Z
//*----------------------------------------------------------------------
#pragma BEGINDUMP
#define _WIN32_WINNT 0x0500
#define WINVER 0x0500
#include "windows.h"
#include "hbapi.h"
HB_FUNC( GETINPUTSTATE )
{
LASTINPUTINFO lpi;
lpi.cbSize = sizeof(LASTINPUTINFO);
if (!GetLastInputInfo(&lpi))
{
hb_retni(0);
}
hb_retni(lpi.dwTime);
}
#pragma ENDDUMP
// FIN / END
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Re: msgAlert se comporta independiente
Hola, es el comportamiento normal de una dialogo con respecto a la ventana. Se me ocurre que cuando el tiempo expira verificaría el estado de la ventana, si está minimizada la maximizaría y después mostraría el MsgAlert.
Saludos
Saludos
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: msgAlert se comporta independiente
horacio wrote:Hola, es el comportamiento normal de una dialogo con respecto a la ventana. Se me ocurre que cuando el tiempo expira verificaría el estado de la ventana, si está minimizada la maximizaría y después mostraría el MsgAlert.
Saludos
Hola Horacio! saludos!
Excelente ! se ve una solución Simple y que debería funcionar a la primera...
Voy a aplicarlo y te comento,
Gracias !!
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: msgAlert se comporta independiente
Listo amigo, funcionó de lujo!horacio wrote:Hola, es el comportamiento normal de una dialogo con respecto a la ventana. Se me ocurre que cuando el tiempo expira verificaría el estado de la ventana, si está minimizada la maximizaría y después mostraría el MsgAlert.
Saludos
Muchas Gracias !!
Un abrazo!
Joao, probé el TINACTIVO , funciona exactamente igual al sysIdleSecs() , toma en cuenta el tiempo inactivo de todo el equipo, no de mi aplicacion.
Gracias por tu generosa ayuda de siempre!
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
- karinha
- Posts: 7910
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: msgAlert se comporta independiente
José, como funciona este sysIdleSecs() ? Puedes hacer un pequeño ejemplo, por favor?
Gracias.
Regards, saludos.
Gracias.
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: msgAlert se comporta independiente
Seguro que si amigo mio, el fin de semana preparo algo sencillo y lo dejo por acá !!karinha wrote:José, como funciona este sysIdleSecs() ? Puedes hacer un pequeño ejemplo, por favor?
Gracias.
Regards, saludos.
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.