监视vb.net中的用户活动

时间:2016-07-12 11:21:20

标签: vb.net monitoring

我想制作一个监控用户活动的程序。我不需要知道用户在做什么,我需要知道的是他正在做些什么。移动鼠标或键入。该程序将用于向在办公桌前的公司以及从工作站离开的公司展示。因此,如果2分钟内没有活动,则意味着用户远离计算机。

我正在考虑使用键盘挂钩和鼠标位置来监控每次改变5秒钟的变化。每次更改我都会重置计数器。

有更好的方法吗? (例如,阅读屏幕保护程序倒计时或类似的东西)

1 个答案:

答案 0 :(得分:2)

您可以P / Invoke WinAPI的GetLastInputInfo()函数,以便能够获得自计算机启动以来收到的最后一个输入的毫秒计数

使用上面的内容减去Environment.TickCount将会显示自收到上次输入以来已失效的毫秒数:

<DllImport("user32.dll")> _
Public Shared Function GetLastInputInfo(ByRef plii As LASTINPUTINFO) As Boolean
End Function

<StructLayout(LayoutKind.Sequential)> _
Public Structure LASTINPUTINFO
    <MarshalAs(UnmanagedType.U4)> _
    Public cbSize As Integer
    <MarshalAs(UnmanagedType.U4)> _
    Public dwTime As Integer
End Structure

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    Dim LastInput As New LASTINPUTINFO With {.cbSize = Marshal.SizeOf(GetType(LASTINPUTINFO))} 'The "cbSize" field must be set every time we call the function.
    If GetLastInputInfo(LastInput) = True AndAlso _
        (Environment.TickCount - LastInput.dwTime) >= 120000 Then '120000 ms = 120 s = 2 min.

        Timer1.Stop()
        'Computer has been idle for 2 minutes. Do your stuff here.
    End If
End Sub

这将检查鼠标和键盘输入。

Timer的Interval属性设置为5000,每隔5秒检查一次,Enabled属性设置为True

请记住 如果您希望再次检查,则必须在两分钟的空闲时间结束后重新启动计时器。