如何在C#桌面应用程序中查找计算机空闲时间(空闲时间)
空闲时间是计算机或设备已通电但未被使用的总时间。如果计算机或计算机设备闲置一段时间,它可能会进入待机模式或关闭电源。
是否有任何方法可以获取这个信息?
如何在C#桌面应用程序中查找计算机空闲时间(空闲时间)
空闲时间是计算机或设备已通电但未被使用的总时间。如果计算机或计算机设备闲置一段时间,它可能会进入待机模式或关闭电源。
是否有任何方法可以获取这个信息?
如果你所说的空闲是指自上次用户输入以来经过的时间(就像 GetIdleTime() 函数所做的那样),则必须使用
GetlastInputInfo()
函数(请参见MSDN):
在C#中,您需要使用P / Invoke:
[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO {
public uint cbSize;
public int dwTime;
}
它会返回上一次用户输入后经过的毫秒数。你需要的第一件事是系统启动时间,你可以通过Environment.TickCount
(从启动时开始计算的毫秒数)获得:
DateTime bootTime = DateTime.UtcNow.AddMilliseconds(-Environment.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);
lastInputTime
的代码,您会发现报告的毫秒值慢慢地向未来漂移。这可能不是一个大问题,但值得注意。 - Jostein Kjønigsen