【问题标题】:Determine if application has had any activity ? VB.NET确定应用程序是否有任何活动? VB.NET
【发布时间】:2013-09-18 22:36:10
【问题描述】:

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

我们有一家零售店,用户共享地面计算机,该应用程序将在每台计算机上,并且需要在使用前登录。如果应用程序空闲了 10 分钟,我正在尝试找到一种自动关闭应用程序的方法。

我想我可以对当前的 Windows 登录会话执行类似的操作 - 设置一个 gp 以在 10 分钟不活动后将用户注销 - 但如果在 vb.net 中有一种简单的、非内存密集型的方法来做到这一点我宁愿用那个方法

谢谢

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    当应用程序启动时,为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 分钟,它会在 TenMinuteTimer.Expire 之后引发 Application.Idle。如果您预计会发生这种情况,请务必在执行长时间运行的代码之前禁用 TenMinuteTimer,然后再启用它。

    【讨论】:

      【解决方案2】:

      您可以尝试使用 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 
      

      【讨论】:

        【解决方案3】:

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

        你是关闭应用还是让它保持打开状态?

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

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

        如果你不关闭应用程序,你如何通知用户,然后,如果另一个用户想要登录,你如何优雅地回滚之前用户的信息?

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

        但是,如果您确实想继续此操作,那么您最好的选择是通过 IMessageFilter 连接到标准 Windows 消息管道。 Here 是一篇关于如何使用它的不错的文章。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多