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

4
有人知道如何检测VB.net Windows窗体应用程序的最近活动吗?我们有一家零售店,用户共享地面电脑,每台机器上都会有该应用程序,并在使用前需要登录。我正在尝试找到一种方法,如果应用程序已经闲置了10分钟左右,就自动关闭它。我想我可以通过当前的Windows登录会话做类似的事情-设置一个gp,在不活动10分钟后注销用户,但如果有一种易于操作、非记忆密集型的vb.net方法来完成,我宁愿使用那种方法。谢谢!
4个回答

5
当应用程序启动时,创建一个处理程序来处理 Application.Idle 事件。还要创建一个对象作为您的10分钟定时器。每当事件队列为空时,都会触发 Appliation.Idle 事件。如果您移动鼠标,则会引发事件。如果您按下键,则会引发事件。请注意,您不能使用 Handles 关键字处理 Application.IdleHandles 仅适用于本地声明的对象,而不适用于静态对象。
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分钟的操作,它将在TenMinuteTimer.Expire之后引发Application.Idle。 如果您预计可能会发生这种情况,请确保在执行长时间运行的代码之前禁用TenMinuteTimer,并在之后再次启用它。


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 

1
我个人推荐使用Windows实现,因为这样你就不必担心可能发生的各种情况:
你关闭应用程序还是让它保持开启状态?
如果用户在屏幕上显示有提示框(消息框)怎么办?
如果你关闭应用程序,如何处理正在进行中的工作?
如果你不关闭应用程序,如何通知用户,然后如果另一个用户想要登录,如何优雅地回滚前一个用户的信息?
如果另一个用户想要登录,如何防止他们看到之前用户可能留在屏幕上的任何敏感信息?
但是,如果您确实希望继续进行,则最好的选择是通过 IMessageFilter 钩入标准的 Windows 消息管道。 这里有一篇不错的文章介绍如何使用它。

0
你可以定期检查光标的坐标,并查看它们是否与上次检查时有所改变。在一定数量的检查中,如果没有任何更改,应用程序将关闭。这可能不是最好的方法,但绝对是一个选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接