Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB6: Verificação do “Idle Time” da Aplicação

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.

   

   

PS: Como sempre, qualquer dúvida, comentário ou correcção ao artigo é sempre bem vinda!

3 comentários:

Anónimo disse...

Muito bom!
Continua com o teu excelente trabalho

António Silva disse...

Interessante. Para VB.Net o código será semelhante? Acho que ainda existe o Declare em VB.Net...

Anónimo disse...

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



Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject
Google-Translate-ChineseGoogle-Translate-Portuguese to FrenchGoogle-Translate-Portuguese to GermanGoogle-Translate-Portuguese to ItalianGoogle-Translate-Portuguese to JapaneseGoogle-Translate-Portuguese to EnglishGoogle-Translate-Portuguese to RussianGoogle-Translate-Portuguese to Spanish

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico