监控 vb.net 中的用户 activity

Monitor user activity in vb.net

我想制作一个监控用户的程序activity。我不需要知道用户在做什么,我只需要知道他在做什么。移动鼠标,或打字。该程序将用于向公司显示谁在办公桌前以及谁离开工作站。所以如果2分钟没有activity,就说明用户离开了电脑

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

有没有更好的方法? (例如阅读屏保倒计时之类的)

您可以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.

记住如果你想让它再次检查,你必须在两分钟的空闲时间过去后重新启动计时器.