检测用户活动

我需要创build一个监视计算机活动的程序。 如鼠标移动,鼠标点击或键盘input。 我不需要logging电脑正在使用的情况。 如果他们的计算机在一段时间内没有使用,即15分钟,我需要开火。

有没有办法让我知道这些事件?

Solutions Collecting From Web of "检测用户活动"

检查这篇文章 ,可以得到电脑的空闲时间,然后你会在任意条件下解雇你的事件。

伪代码:

If Computer_is_Idle > 15 minutes Then Do this Else Do that or Wait more... 

注意:文章中提供的源代码。

谢谢LordCover。 这段代码是从这里开始的 。 这个类为你控制键盘和鼠标控制。 你可以在这样的计时器中使用:

 private void timer1_Tick(object sender, EventArgs e) { listBox1.Items.Add(Win32.GetIdleTime().ToString()); if (Win32.GetIdleTime() > 60000) //1minute { textBox1.Text = "SLEEPING NOW"; } } 

//主要代码控制,粘贴到您的表单代码

 internal struct LASTINPUTINFO { public uint cbSize; public uint dwTime; } public class Win32 { [DllImport("User32.dll")] public static extern bool LockWorkStation(); [DllImport("User32.dll")] private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); [DllImport("coreel32.dll")] private static extern uint GetLastError(); public static uint GetIdleTime() { LASTINPUTINFO lastInPut = new LASTINPUTINFO(); lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut); GetLastInputInfo(ref lastInPut); return ((uint)Environment.TickCount - lastInPut.dwTime); } public static long GetTickCount() { return Environment.TickCount; } public static long GetLastInputTime() { LASTINPUTINFO lastInPut = new LASTINPUTINFO(); lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut); if (!GetLastInputInfo(ref lastInPut)) { throw new Exception(GetLastError().ToString()); } return lastInPut.dwTime; } } 

您需要设置全局键盘钩子和全局鼠标钩子。 这将导致所有键盘和鼠标活动传递给您的应用程序。 您可以记住最后一次这样的事件的时间,并定期检查是否超过您的示例15分钟已经过去了。

看看这里的例子项目。 你也可能会觉得这很有用。