我想制作一个监控用户活动的程序。我不需要知道用户在做什么,我需要知道的是他正在做些什么。移动鼠标或键入。该程序将用于向在办公桌前的公司以及从工作站离开的公司展示。因此,如果2分钟内没有活动,则意味着用户远离计算机。
我正在考虑使用键盘挂钩和鼠标位置来监控每次改变5秒钟的变化。每次更改我都会重置计数器。
有更好的方法吗? (例如,阅读屏幕保护程序倒计时或类似的东西)
答案 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
。
请记住 如果您希望再次检查,则必须在两分钟的空闲时间结束后重新启动计时器。