내 vb.net 데스크톱 응용 프로그램에 자동 로그 오프 기능을 구현하려고합니다. 여기에 코드입니다 : 내가 1 분 말할 수있을 시간을 로그를 설정할 때자동 로그 오프 vb.net
Private Sub AutoLogOffTimer(ByVal myUIContext As globals)
If myUIContext.parameters.LogOutTime <> 0 Then
myTimer = New System.Windows.Forms.Timer()
myTimer.Enabled = False
'myTimer.Dispose()
myTimer.Interval = (myUIContext.parameters.LogOutTime * 60 * 1000) - 20000
AddHandler myTimer.Tick, AddressOf logOutUser
myTimer.Start()
Application.AddMessageFilter(Me)
ElseIf myUIContext.parameters.LogOutTime = 0 Then
Application.RemoveMessageFilter(Me)
RemoveHandler myTimer.Tick, AddressOf logOutUser
myTimer.Stop()
myTimer.Enabled = False
End If
End Sub
Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
' Monitor message for keyboard and mouse messages
Dim active As Boolean = m.Msg = &H100 OrElse m.Msg = &H101
' WM_KEYDOWN/U
'active = active OrElse m.Msg = &HA0 ' OrElse m.Msg = &H200
active = active OrElse m.Msg = &HA3 OrElse m.Msg = &H201 OrElse m.Msg = &H202 OrElse m.Msg = &H1 OrElse m.Msg = &H200 OrElse m.Msg = &H2 OrElse m.Msg = &H208 OrElse m.Msg = &H2A3 OrElse m.Msg = &H2A1
' WM_(NC)MOUSEMOVE
active = active OrElse m.Msg = &H10 OrElse m.Msg = &H3 OrElse m.Msg = &H5
' WM_CLOSE, in case dialog closes
If active Then
myTimer.Enabled = False
myTimer = New System.Windows.Forms.Timer()
If _myUIContext.parameters.LogOutTime <> 0 Then
myTimer.Interval = (_myUIContext.parameters.LogOutTime * 60 * 1000) - 20000
Try
RemoveHandler myTimer.Tick, AddressOf logOutUser
Catch ex As Exception
End Try
AddHandler myTimer.Tick, AddressOf logOutUser
myTimer.Start()
myTimer.Enabled = True
ElseIf _myUIContext.parameters.LogOutTime = 0 Then
myTimer = New System.Windows.Forms.Timer()
myTimer.Stop()
End If
End If
Return False
End Function
Private Sub logOutUser(ByVal sender As Object, ByVal e As EventArgs)
If Not isLogoutWindowOpen Then
If ComputeCpuUsage() < 1 Then
LogoutWindow = New LogoutApp(20)
AddHandler LogoutWindow.logOutCancel, AddressOf logOutCancel
AddHandler LogoutWindow.logOutProceed, AddressOf logOutProceed
LogoutWindow.MdiParent = Me
LogoutWindow.Show()
myTimer.Stop()
isLogoutWindowOpen = True
Else
myTimer.Enabled = False
myTimer.Start()
End If
End If
End Sub
Private Sub logOutCancel()
myTimer = Nothing
myTimer = New System.Windows.Forms.Timer()
myTimer.Enabled = False
myTimer.Stop()
If _myUIContext.parameters.LogOutTime <> 0 Then
myTimer.Interval = (_myUIContext.parameters.LogOutTime * 60 * 1000) - 20000
myTimer.Start()
End If
myTimer.Enabled = True
isLogoutWindowOpen = False
End Sub
문제는이,이 경우 잘 작동하고 난 아무 것도하지 않으면 일분 후에 나에게 로그 아웃 창을 제공 내 신청. 하지만 로그 아웃 창 메시지를 취소하고 응용 프로그램에서 작업을 시작하면 로그 아웃 메시지 상자가 임의로 계속 올라옵니다. 처음에는 타이머가 제대로 재설정되지 않았지만 myTimer.Enabled = False이면 myTimer를 사용하지 않아야합니다. Start()는 확실히 트릭을 완료 했어야하지만, 작동하지 않는 것 같습니다. 내 사전 필터 메시지를 확인했지만 여전히 운이 없다.
도움을 주시면 감사하겠습니다.
감사합니다.
어떤 AutoReset 속성을 어떻게 설정합니까? – KingCronus
Windows 폼 타이머를 사용하고 있는데 자동 재설정 속성이없는 것 같습니다. 시스템 스레드 타이머는 자동 재설정 속성을 갖습니다. – sagar
개인적으로 나는 이것을 위해 Windows 타이머를 사용하지 않을 것이라고 생각합니다. 변수에 DateTime을 유지하여 마지막 상호 작용을 나타낼 수 있습니다. 그런 다음 타이머를 1 초 전에 끝내지 않고 해당 날짜의 값을 확인하기 위해 몇 초마다 타이머를 실행할 수 있습니다. – KingCronus