/// <summary>
        /// Gets time in since last user input
        /// </summary>
        /// <returns></returns>
        public static TimeSpan Duration()
        {
            uint idleTime = 0;
            var lastInputInfo = new LASTINPUTINFO();
            lastInputInfo.cbSize = (uint) Marshal.SizeOf(lastInputInfo);
            lastInputInfo.dwTime = 0;

            uint envTicks = (uint)Environment.TickCount;

            if (GetLastInputInfo(ref lastInputInfo))
            {
                uint lastInputTick = lastInputInfo.dwTime;

                idleTime = envTicks - lastInputTick;
            }

            return TimeSpan.FromMilliseconds(idleTime);
        }
 static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);