如何查找我的电脑在C#桌面上的空闲时间(空闲时间)

如何查找我的电脑在C#桌面上的空闲时间(空闲时间),c#,C#,如何在C#桌面应用程序上查找我的计算机空闲时间(空闲时间) 空闲时间是计算机或设备已通电但尚未使用的总时间。如果计算机或计算机设备闲置一段时间,它可能会进入待机模式或关闭电源 有什么方法可以得到它吗?如果使用idle表示从上次用户输入开始经过的时间(如GetIdleTime()函数所示),则必须使用GetlastInputInfo()函数(请参阅): 在C#中,您必须p/调用它: [DllImport("user32.dll")] static extern bool GetLastInputI

如何在C#桌面应用程序上查找我的计算机空闲时间(空闲时间)


空闲时间是计算机或设备已通电但尚未使用的总时间。如果计算机或计算机设备闲置一段时间,它可能会进入待机模式或关闭电源

有什么方法可以得到它吗?

如果使用idle表示从上次用户输入开始经过的时间(如
GetIdleTime()
函数所示),则必须使用
GetlastInputInfo()
函数(请参阅):

在C#中,您必须p/调用它:

[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO {
    public uint cbSize;
    public int dwTime;
}
它将返回上次用户输入的系统启动所经过的毫秒数。首先需要的是系统启动时间,您可以从
环境中获得该时间。TickCount
(启动后的毫秒数),然后:

现在您可以获得最后一次输入的时间:

LASTINPUTINFO lii = new LASTINPUTINFO();
lii.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
GetLastInputInfo(ref lii);

DateTime lastInputTime = bootTime.AddMilliseconds(lii.dwTime);
然后,经过的时间将是:

TimeSpan idleTime = DateTime.UtcNow.Subtract(lastInputTime);

根据您的UI框架(您没有指定),您需要捕获消息并存储接收消息的时间


您应该如何捕捉此消息

什么是空闲的?请定义待机时间是计算机或设备已通电但尚未使用的总时间。如果计算机或计算机设备空闲一段时间,它可能会进入待机模式或断电。应用程序空闲状态不是系统空闲状态(即使这个术语在这里有点误用)。在应用程序级别,这意味着它没有其他需要处理的内容(不限于用户输入)。在系统级,这意味着用户并没有和系统交互。虽然这种方法很好,但应该注意的是,它并不是100%准确。如果在30秒内运行代码轮询
lastInputTime
,您将看到报告的毫秒值正在缓慢地漂移到未来。可能不是什么大问题,但值得注意。@JosteinKjønigsen的精确度或多或少是50毫秒(时间片是因为低分辨率的时间测量),然后您可以将空闲时间舍入到前一秒(大约),但我很惊讶会出现漂移!漂亮的接球!!!
TimeSpan idleTime = DateTime.UtcNow.Subtract(lastInputTime);