我需要创建一个监视计算机活动的程序。如鼠标移动,鼠标点击或键盘输入。我不需要记录计算机正在使用中发生的事情。如果他们的计算机在一段时间内没有被使用,即15分钟,我需要发射一个事件。
有没有办法让我收到这些事件的通知?
答案 0 :(得分:8)
检查可以获取计算机空闲时间的this article,然后您可以在任意条件下触发事件。
伪代码:
If Computer_is_Idle > 15 minutes Then
Do this
Else
Do that or Wait more...
注意:文章中提供的源代码。
答案 1 :(得分:8)
谢谢LordCover。此代码来自here。该类可以为您控制键盘和鼠标控件。你可以在这样的计时器中使用:
private void timer1_Tick(object sender, EventArgs e)
{
listBox1.Items.Add(Win32.GetIdleTime().ToString());
if (Win32.GetIdleTime() > 60000) // 1 minute
{
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("Kernel32.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 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;
}
}
答案 2 :(得分:0)