自动logout如何实现
CS结构,当程序10分钟没有操作,自动logout如何实现?参考一下代码。谢谢。最好提供VB.NET
[解决办法]
这个不是太简单了吗?如下操作:
1 定义一个时间变量,进行任何操作就赋值为当前时间。
2 放一个timer,考虑到效率就每10秒运行一次吧,判断上面的变量值是否是十分钟前了,如果是,logout
[解决办法]
程序重启:
Application.restart
回到登录界面,重新登录!
[解决办法]
监控,其实很简单,要在程序有操作,就记录最后一次操作时间,然后 这个时间和现在时间比对。超过你设定的时间长度就 退出咯。
监控每个窗体的所有触发事件。 WinForm的所有Messgage,包括点击鼠标,移动鼠标等。
[解决办法]
你可以看看这篇文章。
http://www.cnblogs.com/fish-li/archive/2011/12/27/2304063.html
他是讲解Cache对象的。
这个对象有一个过期通知功能。
按照你的要求,可以在登录是创建一个Cache对象,设置过期时间为你需要的时间。当每次操作的时候都去设置改对象的值,如果不在操作,等过了你的设置时间后会自动删除,这个时候会有一个删除通知的委托。正好实现你的自动logout。
[解决办法]
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_REFLECT + WM_COMMAND Then
If HIWORD(CType(m.WParam, Integer)) = CBN_DROPDOWN Then
ShowDropDown()
Return
End If
End If
MyBase.WndProc(m)
End Sub
‘---
m.Msg 是windows的系统消息,包括一切消息。肯定满足你所要的鼠标,键盘动作。
Imports System.Runtime.InteropServices
imports system.drawing
Public Class Form1
private label1 as new lable()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'MsgBox(GetIdleTime())
label1.location = new point(10,10)
label1.size=new size(50,15)
me.controls.add(label1)
Timer1.Interval = 5000
timer1.enable = true //这里开始计时
End Sub
'using System.Runtime.InteropServices;
<DllImport("user32.dll")> _
Private Shared Function GetLastInputInfo(ByRef plii As LASTINPUTINFO) As Integer
End Function
<StructLayout(LayoutKind.Sequential)> _
Friend Structure LASTINPUTINFO
<MarshalAs(UnmanagedType.U4)> _
Public cbSize As Integer
<MarshalAs(UnmanagedType.U4)> _
Public dwTime As Integer
End Structure
Private lastinput As New LASTINPUTINFO()
'获取空闲时间,单位是秒
Private Function GetIdleTime() As Integer
lastinput.cbSize = Marshal.SizeOf(lastinput)
lastinput.dwTime = 0
If GetLastInputInfo(lastinput) <> 0 Then
//这里是除1000,不除是以毫秒为单位
Return (Environment.TickCount - lastinput.dwTime) / 1000
End If
Return 0
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'MsgBox(GetIdleTime())
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
label1.Text = GetIdleTime().ToString()
End Sub
End Class