TEMPO DE INATIVIDADE
Boa noite,
Amigos preciso colocar no meu projeto VB6 saber quando o usuario nao mexe nem no mouse nem no teclado para que pudesse botar um timer para sair de um determinado form.
ex: o usuario esta mexendo e ele para de mexer ai eu tenho que saber por quanto tempo dele deixo de mexer no mouse ou no teclado e ai quando se passar 30 segundos sem mexer nem no mouse nem no teclado ai eu tenho que sair do form.
desde ja muito obrigado a todos
Amigos preciso colocar no meu projeto VB6 saber quando o usuario nao mexe nem no mouse nem no teclado para que pudesse botar um timer para sair de um determinado form.
ex: o usuario esta mexendo e ele para de mexer ai eu tenho que saber por quanto tempo dele deixo de mexer no mouse ou no teclado e ai quando se passar 30 segundos sem mexer nem no mouse nem no teclado ai eu tenho que sair do form.
desde ja muito obrigado a todos
em relação ao teclado pode usar o evento keypress ... ao mouse vai ter que usar apis ...
Ja tentou adaptar aqueles projetos de screen saver? Em vez de carregar form, vc vai ocultar form
Serve em vb.net ?
Olá..
Nessa api, se o usuário movimentar o mouse, é interrompido o timer.Interval definido, e recomeça a contagem de tempo.
Entretanto, o tempo do timer.Interval é elastecido (P.ex., se estiver definido para 30.000 milissegundos, a recontagem
redefine o tempo programado para aprox. 60.000 milissegundos).
Existe alguma maneira para reconduzir a contagem para o que está programado no timer.Interval?
(pelos testes que fiz, se programar o intervalo para aprox. 1 min, qualquer toque no mouse ou no teclado leva a ação
a ser executada em aprox. 2 min.).
Nessa api, se o usuário movimentar o mouse, é interrompido o timer.Interval definido, e recomeça a contagem de tempo.
Entretanto, o tempo do timer.Interval é elastecido (P.ex., se estiver definido para 30.000 milissegundos, a recontagem
redefine o tempo programado para aprox. 60.000 milissegundos).
Existe alguma maneira para reconduzir a contagem para o que está programado no timer.Interval?
(pelos testes que fiz, se programar o intervalo para aprox. 1 min, qualquer toque no mouse ou no teclado leva a ação
a ser executada em aprox. 2 min.).
[ô]Há uma solução bem mais simples, conforme abaixo.
[ô](o evento que reconta o temporizador é o movimento do mouse).
[ô]A propriedade <Interval> foi definida para o valor 1020 (valor mais próximo de
[ô]1 segundo). E o tempo para descarregar o form é de 30 segundos.
[ô]A cada movimento do mouse, o tempo é recontado, voltando ao valor definido no
[ô]carregamento do form.
[txt-color=#007100]Option Explicit
Dim Tempo As Date
Private Sub Form_Load()
Tempo = [Ô]00:00:30[Ô]
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Tempo = [Ô]00:00:30[Ô]
End Sub
Private Sub Timer1_Timer()
Tempo = TimeValue(Tempo) - TimeValue([Ô]00:00:01[Ô])
If Tempo = CDate([Ô]00:00:00[Ô]) Then
Unload Me
End If
End Sub[/txt-color]
[ô](o evento que reconta o temporizador é o movimento do mouse).
[ô]A propriedade <Interval> foi definida para o valor 1020 (valor mais próximo de
[ô]1 segundo). E o tempo para descarregar o form é de 30 segundos.
[ô]A cada movimento do mouse, o tempo é recontado, voltando ao valor definido no
[ô]carregamento do form.
[txt-color=#007100]Option Explicit
Dim Tempo As Date
Private Sub Form_Load()
Tempo = [Ô]00:00:30[Ô]
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Tempo = [Ô]00:00:30[Ô]
End Sub
Private Sub Timer1_Timer()
Tempo = TimeValue(Tempo) - TimeValue([Ô]00:00:01[Ô])
If Tempo = CDate([Ô]00:00:00[Ô]) Then
Unload Me
End If
End Sub[/txt-color]
Citação:Sirius
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Tempo = [Ô]00:00:30[Ô]
End Sub
Muito inteligente voce, parabens pela a criatividade. Porem se o form não estiver maximizado e o mouse passar fora do form, então a recontagem não começa.
Ao meu ver deve usar a apis e quando o mouse movimentar deve-se refazer a contagem:
Private Type POINTAPI
X As Long
Y As Long
End Type
Private mTeclado As Integer
Private mPos As POINTAPI
Private Declare Function GetCursorPos Lib [Ô]user32[Ô] (lpPoint As POINTAPI) As Long
Private sub Form_Load
Call GetCursorPos(mPos)
Tempo = [Ô]00:00:30[Ô]
End sub
Private Sub tmrEvento_Timer()
Dim xPos As POINTAPI
Call GetCursorPos(xPos)
If (xPos.X <> mPos.X Or xPos.Y <> mPos.Y) Then [ô]Se o mouse mexeu continua a 30[Ô]
Tempo = [Ô]00:00:30[Ô]
Exit Sub
End If
Tempo = TimeValue(Tempo) - TimeValue([Ô]00:00:01[Ô])
If Tempo = CDate([Ô]00:00:00[Ô]) Then [ô]Se zerou descarraga o form
Unload Me
End If
End Sub
Pronto ...... adaptei a minha ideia na sua ..... e o teclado tem alguma ideia???
A melhor maneira é com uma API: veja
Basta chamar o GetLastInput() que ira retornar o numero em segundos da ultima entrada de dados.
Basta chamar o GetLastInput() que ira retornar o numero em segundos da ultima entrada de dados.
Private Declare Function GetLastInputInfo Lib [Ô]user32[Ô] (plii As Any) As Long
Private Declare Function GetTickCount Lib [Ô]kernel32[Ô] () As Long
Private Type LASTINPUTINFO
cbSize As Long
dwTime As Long
End Type
Function GetLastInput() As Long
Dim lii As LASTINPUTINFO
lii.cbSize = Len(lii)
Call GetLastInputInfo(lii)
GetLastInput = Int((GetTickCount() - lii.dwTime) / 1000)
End Function
Germano como utilizar esta API .... ? dá uma demonstração no exemplo para o rapaz ...
Coloca em um timer com intervalo de 1000 milisegundos
Private Sub tmrEvento_Timer()
dim SegundosSemMexer as long
SegundosSemMexer = GetLastInput()
Debug.print = SegundosSemMexer
if SegundosSemMexer >30 then
[ô]Faça alguma coisa
end if
End Sub
Perfeito ..... GUIGOR é só copiar ... rsrs
Tópico encerrado , respostas não são mais permitidas