public static IdleTimeInfo GetIdleTimeInfo() { var systemUptime = Environment.TickCount; var idleTicks = 0; var lastInputInfo = new LASTINPUTINFO(); lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo); lastInputInfo.dwTime = 0; if (GetLastInputInfo(ref lastInputInfo)) { var lastInputTicks = (int)lastInputInfo.dwTime; idleTicks = systemUptime - lastInputTicks; } return new IdleTimeInfo { LastInputTime = DateTime.Now.AddMilliseconds(-1 * idleTicks), IdleTime = new TimeSpan(0, 0, 0, 0, idleTicks), SystemUptimeMilliseconds = systemUptime, }; }
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);