O
idle time é o tempo que uma aplicação não está a ser utilizada, estando no entanto
ligada, quer seja um programa simples ou um sistema operativo. O
idle time é utilizado, por exemplo, para iniciar o
screensaver do sistema operativo mas pode ser utilizado para outros
fins. Por exemplo se necessitarmos de fazer o
logout automático de um utilizador caso este não esteja a utilizar a aplicação
durante x segundos, temos de calcular o idle time. Mas existem com certeza
mais aplicações.
Para calcular o
idle time temos de utilizar uma API (Application Programming Interface) que
nos irá verificar o tipo de mensagens encontradas num processo, como o movimento
do rato ou o pressionar de uma tecla. Esse API é o GetQueueStatus() e para mais
informações podem visitar o seguinte link MSDN GetQueueStatus()
' Declaração do API
Private Declare Function GetQueueStatus Lib "user32"
(ByVal fuFlags As Long)
As Long
' Definição das constantes
de sistema
Private Const QS_KEY = &H1
Private Const QS_MOUSEMOVE = &H2
Private Const QS_MOUSEBUTTON = &H4
Private
Const QS_MOUSE = (QS_MOUSEMOVE Or QS_MOUSEBUTTON)
Private Const QS_INPUT = (QS_MOUSE Or QS_KEY)
Public blnCancel As
Boolean
Esta função irá verificar o tempo
em que não existem mensagens de um tipo seleccionado, permitindo executar uma acção ou mostrar
uma informação caso esse tempo tenha sido atingido. Neste exemplo
irá ser usada uma mensagem de informação.
Public Sub
CheckInputIdle(ByVal TimeOut_InSeconds
As Long)
Dim
t As Long
' Atribui à variável t o valor do Time. O Timer representa
' o número de segundos que passou desde a meia-noite
t = Timer
' Inicia o ciclo enquanto a variável blnCancel ser falsa
Do While blnCancel =
False
' Caso não exista actividade actualiza a variável t
If GetQueueStatus(QS_INPUT) Then
t = Timer
DoEvents
End If
' Caso tenha sido detectado que o tempo ultrapassou sai do
ciclo
If Timer - t >= TimeOut_InSeconds
Then Exit Do
Loop
' Notificação de que o tempo chegou ao fim
If blnCancel = False
Then
MsgBox "A aplicação está sem actividade à " & Timer - t &
" segundos.", vbInformation
' Para voltar a chamar esta verificação
' Call CheckInputIdle(10)
End If
End Sub
Finalmente a chamada da função no
evento load do
form e que neste caso irá mostrar uma mensagem passados 10 segundos
Private Sub Form_Load()
Me.Show
Call CheckInputIdle(10)
End Sub
Um exemplo simples que poderá ser
adaptado às necessidades de cada aplicação para os mais diversos fins.
3 comentários:
Muito bom!
Continua com o teu excelente trabalho
Interessante. Para VB.Net o código será semelhante? Acho que ainda existe o Declare em VB.Net...
Como posso utilizar este codigo para verificar se houve uma alteração em uma pasta ou arquivo ?, gerando log de Data e Hora de modificação
Enviar um comentário