Compartilhar via


Detectar o tempo ocioso ou a inatividade do usuário

Este tópico mostra como criar um procedimento que será executado se o aplicativo Access não detectar nenhuma entrada do usuário por um período de tempo especificado. Envolve a criação de um formulário oculto, DetectIdleTime, que mantém o controle do tempo ocioso.

Siga estas etapas para criar o formulário DetectIdleTime.

  1. Crie um formulário em branco que não seja baseado em uma tabela ou consulta e nomeie-o como DetectIdleTime.

  2. Set the following form properties:

    Observação

    [!OBSERVAçãO] The TimerInterval setting indicates how often (in milliseconds) the application checks for user inactivity. A setting of 1000 equals 1 second.

    Propriedade Valor
    OnTimer [Procedimento do Evento]
    TimerInterval 1000
  3. Enter the following code for the OnTimer property event procedure:

     Sub Form_Timer() 
             ' IDLEMINUTES determines how much idle time to wait for before 
             ' running the IdleTimeDetected subroutine. 
             Const IDLEMINUTES = 5 
    
             Static PrevControlName As String 
             Static PrevFormName As String 
             Static ExpiredTime 
    
             Dim ActiveFormName As String 
             Dim ActiveControlName As String 
             Dim ExpiredMinutes 
    
             On Error Resume Next 
    
             ' Get the active form and control name. 
    
             ActiveFormName = Screen.ActiveForm.Name 
             If Err Then 
                 ActiveFormName = "No Active Form" 
                 Err = 0 
             End If 
    
             ActiveControlName = Screen.ActiveControl.Name 
                 If Err Then 
                 ActiveControlName = "No Active Control" 
                 Err = 0 
             End If 
    
             ' Record the current active names and reset ExpiredTime if: 
             '    1. They have not been recorded yet (code is running 
             '       for the first time). 
             '    2. The previous names are different than the current ones 
             '       (the user has done something different during the timer 
             '        interval). 
             If (PrevControlName = "") Or (PrevFormName = "") _ 
               Or (ActiveFormName <> PrevFormName) _ 
               Or (ActiveControlName <> PrevControlName) Then 
                 PrevControlName = ActiveControlName 
                 PrevFormName = ActiveFormName 
                 ExpiredTime = 0 
             Else 
                 ' ...otherwise the user was idle during the time interval, so 
                 ' increment the total expired time. 
                 ExpiredTime = ExpiredTime + Me.TimerInterval 
             End If 
    
             ' Does the total expired time exceed the IDLEMINUTES? 
             ExpiredMinutes = (ExpiredTime / 1000) / 60 
             If ExpiredMinutes >= IDLEMINUTES Then 
                 ' ...if so, then reset the expired time to zero... 
                 ExpiredTime = 0 
                 ' ...and call the IdleTimeDetected subroutine. 
                 IdleTimeDetected ExpiredMinutes 
             End If 
           End Sub
    

Em seguida, crie o seguinte procedimento no módulo de formulário:

 Sub IdleTimeDetected(ExpiredMinutes) 
         Dim Msg As String 
         Msg = "No user activity detected in the last " 
         Msg = Msg & ExpiredMinutes & " minute(s)!" 
         MsgBox Msg, 48 
       End Sub

Para ocultar o formulário DetectIdleTime como ele é aberto, defina o argumento WindowMode do método OpenForm como acHidden.

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.