确定应用程序是否有任何活动? VB.NET

时间:2011-11-11 17:05:14

标签: vb.net

有没有人知道在VB.net Windows窗体应用程序中检测最近活动的方法?

我们有一个零售店,用户共享楼层电脑,应用程序将在每台机器上,并在使用前需要登录。我试图找到一种方法来自动关闭应用程序,如果它已经闲置10分钟。

我想我可以用当前的Windows登录会话做类似的事情 - 设置一个gp,在10分钟不活动后记录用户 - 但是如果有一个简单的,非内存密集的方式在vb.net中执行它我宁愿使用那种方法

感谢

4 个答案:

答案 0 :(得分:5)

当应用程序启动时,为Application.Idle事件创建一个处理程序。还要创建一个10分钟计时器的对象。每次事件队列为空时都会引发Appliation.Idle事件。如果移动鼠标,则会引发事件。如果按某个键,则会引发事件。请注意,您无法将Handles关键字与Application.Idle一起使用。 Handles仅适用于本地十分对象,而不适用于静态对象。

Public Sub MainForm_Load(sender As Object, e As EventArgs) Handles MainForm.Load
    AddHandler System.Windows.Forms.Application.Idle, AddressOf Application_Idle
    ' TODO: Create the 10-minute timer.
End Sub

Private Sub Application_Idle(sender As Object, e As EventArgs)  
    ' TODO: Restart the 10-minute timer.
End Sub

' This assumes your TenMinuteTimer object has an Expire event.  Do what works for you instead.
Private Sub TenMinuteTimer_Expire(sender As Object, e As EventArgs) Handles TenMinuteTimer.Expire
    ' TODO: Close the application safely.
End Sub

唯一的问题是,如果用户启动的操作时间超过10分钟,则会在Application.Idle后提升TenMinuteTimer.Expire。如果您希望这种情况发生,请务必在执行长时间运行的代码之前禁用TenMinuteTimer,然后再重新启用它。

答案 1 :(得分:1)

您可以尝试使用Application.Idle事件;像这样:

Private Sub Application_Idle(ByVal sender As Object, ByVal e As EventArgs) 

    MessageBox.Show("You are in the Application.Idle event.")

End Sub 

答案 2 :(得分:1)

我个人推荐Windows实现,因为您不必担心可能发生的所有各种情况:

你关闭应用程序还是打开它?

如果用户在屏幕上显示提示(消息框),该怎么办?

如果关闭应用程序,您如何处理正在进行的工作?

如果您没有关闭应用程序,如何通知用户,然后,如果其他用户想要登录,您如何优雅地回滚以前用户的信息?

如果其他用户想要登录,您如何阻止他们看到上一位用户可能在屏幕上留下的任何敏感信息?

但是,如果你想继续这样做,那么最好的办法是通过IMessageFilter挂钩标准的Windows消息管道。 Here是一篇关于如何使用它的好文章。

答案 3 :(得分:0)

您可以定期检查光标的坐标,看看自上次检查后它们是否已更改。经过一定数量的检查而没有任何变化后,应用程序将关闭。可能不是最好的方法,但绝对是一种选择。