我已经使用了很长时间,但现在我发现了一个错误,即 48 天后它没有给我正确的空闲时间。
这是由于 integer32 位。我可以设法通过Environment.TickCount 长时间获得滴答计数器是不够的
但是,我需要获得空闲时间,并且 GetLastInputTime() [ http://www.codeproject.com/KB/system/rtwidledll.aspx?display=PrintAll]不会让我长时间返回。
public static int GetIdleTime()
{
return (Environment.TickCount & Int32.MaxValue)- (int)GetLastInputTime();
}
/// <summary>
/// Get the last input time from the input devices.
/// Exception:
/// If it cannot get the last input information then it throws an exception with
/// the appropriate message.
/// </summary>
/// <returns>Last input time in milliseconds.</returns>
public static uint GetLastInputTime()
{
LastInputInfo lastInPut = new LastInputInfo();
lastInPut.BlockSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
if (!GetLastInputInfo(ref lastInPut))
{
throw new Exception(GetLastError().ToString());
}
return lastInPut.Time;
}