In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Detectar Inactividad

Foro de Xailer profesional en español
Responder
ssi-estono-
Mensajes: 239
Registrado: Sab Ene 24, 2009 8:23 pm

Detectar Inactividad

Mensaje por ssi-estono- »

Me gustaría conseguir que cuando mi aplicación (Ordenador) este unos minutos
inactiva se lance un formulario.
¿Se puede hacer de alguna forma?
Gracias.
Paco V
Jesus Semper
Mensajes: 54
Registrado: Lun Ene 04, 2010 2:40 pm

Detectar Inactividad

Mensaje por Jesus Semper »

Con simple TTimer (pestaña Sistema)
"Paco V." <ssi-estono-@ono.com> escribió en el mensaje
news:4b2f3baa$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Me gustaría conseguir que cuando mi aplicación (Ordenador) este unos
> minutos inactiva se lance un formulario.
>
> ¿Se puede hacer de alguna forma?
>
> Gracias.
>
> Paco V
>
Avatar de Usuario
emeasoft
Mensajes: 1094
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Detectar Inactividad

Mensaje por emeasoft »

Jesus:
Para teste tentei criar o objeto TTimer conforme exemplo abaixo.
Mas, dispara o evento apenas uma vez.
Como fazer para o temporizador ficar disparando a cada segundo?
Para probar he intentado crear el objeto TTimer como el ejemplo a
continuación.
Pero dispara el evento de una sola vez.
¿Cómo obtener el temporizador de disparo cada segundo?
METHOD FormShow( oSender ) CLASS TForm1
WITH OBJECT TTimer():Create()
:SetInterval(1000)
:lEnabled := .T.
:OnTimer(::oLabel1:cText:=STR(Seconds()))
::oLabel1:Show()
END
RETURN Nil
Saludos!
Mário Angelini
www.eMeAsOfT.com
http://emeasoft.blogspot.com/
http://twitter.com/emeasoft
ssi-estono-
Mensajes: 239
Registrado: Sab Ene 24, 2009 8:23 pm

Detectar Inactividad

Mensaje por ssi-estono- »

Ojala fuera tan sencillo.
El tema es como saber que no han realizado ninguna acción, como mover el
raton, situarse sobre un boton sin pulsar, etc.
Claro, se podria poner que el timer se reiniciara cada vez que pulso en un
boton, pero la pantalla tiene como 100 botones distintos y con eventos
distintos.
Algo mas general sobre el formulario,......
Gracias por vuestra ayuda.
Paco V
"Mário Angelini" <mario@emeasoft.com.br> escribió en el mensaje
news:[email=4b2fd7fa@svctag-j7w3v3j....]4b2fd7fa@svctag-j7w3v3j....[/email]
> Jesus:
>
> Para teste tentei criar o objeto TTimer conforme exemplo abaixo.
> Mas, dispara o evento apenas uma vez.
> Como fazer para o temporizador ficar disparando a cada segundo?
>
>
> Para probar he intentado crear el objeto TTimer como el ejemplo a
> continuación.
> Pero dispara el evento de una sola vez.
> ¿Cómo obtener el temporizador de disparo cada segundo?
>
>
> METHOD FormShow( oSender ) CLASS TForm1
>
> WITH OBJECT TTimer():Create()
> :SetInterval(1000)
> :lEnabled := .T.
> :OnTimer(::oLabel1:cText:=STR(Seconds()))
> ::oLabel1:Show()
> END
>
> RETURN Nil
>
>
> Saludos!
> Mário Angelini
> www.eMeAsOfT.com
> http://emeasoft.blogspot.com/
> http://twitter.com/emeasoft
>
>
>
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Detectar Inactividad

Mensaje por jlalin »

Paco,
> Me gustarí­a conseguir que cuando mi aplicación (Ordenador) este unos minutos
> inactiva se lance un formulario.
Sí­, es posible hacerlo. Luego lo busco y te lo enví­o para que lo pruebes.
Saludos,
José Lalí­n
Jesus Semper
Mensajes: 54
Registrado: Lun Ene 04, 2010 2:40 pm

Detectar Inactividad

Mensaje por Jesus Semper »

Tienes razon, es mas complicado de lo que parece a primera vista.
He estado leyendo un poco del API de Windows y existe una funcion llamada
GetMesage que lo que hace es recuperar un mensaje de la lista de mensajes.
Por otro lado cuando se pulsa una tecla se coloca un mensaje WM_KEYDOW y
cuando se mueve el raton otro de tipo WM_MOUSEMOVE. (Esto lo he sacado de un
fichero que me baje de internet llamado "WinAPI5n.pdf")
Sin tener nada claro como se gestiona eso, creo que la solucion pasara por
llamar (no se como) a la funcion GetMessage y evaluar si en la lista hay uno
de tipo WM_KEYDOW (el usuario habra tecleado algo) o WM_MOUSEMOVE (el
usuario habra movido el raton) y en ese salir del timer sin hacer nada. Si
no hay un mensaje de ninguno de estos 2 tipos, lanzar el Form que desees
presentar.
De todos modos esto lo tiene que corroborar alguien que de verdad entienda
del API de Windows.
"Paco V." <ssi-estono-@ono.com> escribió en el mensaje
news:4b2ff103$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Ojala fuera tan sencillo.
>
> El tema es como saber que no han realizado ninguna acción, como mover el
> raton, situarse sobre un boton sin pulsar, etc.
> Claro, se podria poner que el timer se reiniciara cada vez que pulso en un
> boton, pero la pantalla tiene como 100 botones distintos y con eventos
> distintos.
> Algo mas general sobre el formulario,......
>
> Gracias por vuestra ayuda.
>
> Paco V
>
> "Mário Angelini" <mario@emeasoft.com.br> escribió en el mensaje
> news:[email=4b2fd7fa@svctag-j7w3v3j....]4b2fd7fa@svctag-j7w3v3j....[/email]
>> Jesus:
>>
>> Para teste tentei criar o objeto TTimer conforme exemplo abaixo.
>> Mas, dispara o evento apenas uma vez.
>> Como fazer para o temporizador ficar disparando a cada segundo?
>>
>>
>> Para probar he intentado crear el objeto TTimer como el ejemplo a
>> continuación.
>> Pero dispara el evento de una sola vez.
>> ¿Cómo obtener el temporizador de disparo cada segundo?
>>
>>
>> METHOD FormShow( oSender ) CLASS TForm1
>>
>> WITH OBJECT TTimer():Create()
>> :SetInterval(1000)
>> :lEnabled := .T.
>> :OnTimer(::oLabel1:cText:=STR(Seconds()))
>> ::oLabel1:Show()
>> END
>>
>> RETURN Nil
>>
>>
>> Saludos!
>> Mário Angelini
>> www.eMeAsOfT.com
>> http://emeasoft.blogspot.com/
>> http://twitter.com/emeasoft
>>
>>
>>
>
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9441
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Detectar Inactividad

Mensaje por ignacio »

Paco,
Lo más sencillo es que sólo controles el MouseMove del formulario principal.
En dicho formulario reseteas una variable estática, en el timer la
incrementas y cuando sobrepasa el valor que tu quieras disparas lo que
quieres y vuelves a resetear la variable.
Saludos,
"Paco V." <ssi-estono-@ono.com> escribió en el mensaje de
noticias:4b2ff103$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Ojala fuera tan sencillo.
>
> El tema es como saber que no han realizado ninguna acción, como mover el
> raton, situarse sobre un boton sin pulsar, etc.
> Claro, se podria poner que el timer se reiniciara cada vez que pulso en un
> boton, pero la pantalla tiene como 100 botones distintos y con eventos
> distintos.
> Algo mas general sobre el formulario,......
>
> Gracias por vuestra ayuda.
>
> Paco V
>
> "Mário Angelini" <mario@emeasoft.com.br> escribió en el mensaje
> news:[email=4b2fd7fa@svctag-j7w3v3j....]4b2fd7fa@svctag-j7w3v3j....[/email]
>> Jesus:
>>
>> Para teste tentei criar o objeto TTimer conforme exemplo abaixo.
>> Mas, dispara o evento apenas uma vez.
>> Como fazer para o temporizador ficar disparando a cada segundo?
>>
>>
>> Para probar he intentado crear el objeto TTimer como el ejemplo a
>> continuación.
>> Pero dispara el evento de una sola vez.
>> ¿Cómo obtener el temporizador de disparo cada segundo?
>>
>>
>> METHOD FormShow( oSender ) CLASS TForm1
>>
>> WITH OBJECT TTimer():Create()
>> :SetInterval(1000)
>> :lEnabled := .T.
>> :OnTimer(::oLabel1:cText:=STR(Seconds()))
>> ::oLabel1:Show()
>> END
>>
>> RETURN Nil
>>
>>
>> Saludos!
>> Mário Angelini
>> www.eMeAsOfT.com
>> http://emeasoft.blogspot.com/
>> http://twitter.com/emeasoft
>>
>>
>>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
ssi-estono-
Mensajes: 239
Registrado: Sab Ene 24, 2009 8:23 pm

Detectar Inactividad

Mensaje por ssi-estono- »

Gracias a Todos por vuestra Ayuda.
Me lo ha solucionado JJ, con un simple onChangeFocus.
Dado que es un formulario lleno de Botones y de paneles.
Si hay algo mejor,....
Gracias a todos y Feliz Navidad.
Paco v
"Ignacio Ortiz de Zúñiga" <NoNameToAvoidSpam@xailer.com> escribió en el
mensaje news:4b3215ea$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Paco,
>
> Lo más sencillo es que sólo controles el MouseMove del formulario
> principal. En dicho formulario reseteas una variable estática, en el timer
> la incrementas y cuando sobrepasa el valor que tu quieras disparas lo que
> quieres y vuelves a resetear la variable.
>
> Saludos,
>
> "Paco V." <ssi-estono-@ono.com> escribió en el mensaje de
> noticias:4b2ff103$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>> Ojala fuera tan sencillo.
>>
>> El tema es como saber que no han realizado ninguna acción, como mover el
>> raton, situarse sobre un boton sin pulsar, etc.
>> Claro, se podria poner que el timer se reiniciara cada vez que pulso en
>> un boton, pero la pantalla tiene como 100 botones distintos y con eventos
>> distintos.
>> Algo mas general sobre el formulario,......
>>
>> Gracias por vuestra ayuda.
>>
>> Paco V
>>
>> "Mário Angelini" <mario@emeasoft.com.br> escribió en el mensaje
>> news:[email=4b2fd7fa@svctag-j7w3v3j....]4b2fd7fa@svctag-j7w3v3j....[/email]
>>> Jesus:
>>>
>>> Para teste tentei criar o objeto TTimer conforme exemplo abaixo.
>>> Mas, dispara o evento apenas uma vez.
>>> Como fazer para o temporizador ficar disparando a cada segundo?
>>>
>>>
>>> Para probar he intentado crear el objeto TTimer como el ejemplo a
>>> continuación.
>>> Pero dispara el evento de una sola vez.
>>> ¿Cómo obtener el temporizador de disparo cada segundo?
>>>
>>>
>>> METHOD FormShow( oSender ) CLASS TForm1
>>>
>>> WITH OBJECT TTimer():Create()
>>> :SetInterval(1000)
>>> :lEnabled := .T.
>>> :OnTimer(::oLabel1:cText:=STR(Seconds()))
>>> ::oLabel1:Show()
>>> END
>>>
>>> RETURN Nil
>>>
>>>
>>> Saludos!
>>> Mário Angelini
>>> www.eMeAsOfT.com
>>> http://emeasoft.blogspot.com/
>>> http://twitter.com/emeasoft
>>>
>>>
>>>
>>
>>
Responder