如何查看我的计算机在C#Desktop Application上闲置多长时间(空闲时间)
空闲时间是计算机或设备启动但未使用的总时间.如果计算机或计算机设备闲置一段时间,它可能会进入待机模式或关机.
有没有办法得到它?
如果有空闲你的意思是从最后一次用户输入开始经过的时间(正如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;
}
Run Code Online (Sandbox Code Playgroud)
它将返回上次用户输入的系统引导所经过的毫秒数.首先你需要的是系统启动时间,你可以从Environment.TickCount(启动时的毫秒数)开始,然后:
DateTime bootTime = DateTime.UtcNow.AddMilliseconds(-Environment.TickCount);
Run Code Online (Sandbox Code Playgroud)
现在你可以有最后一次输入的时间:
LASTINPUTINFO lii = new LASTINPUTINFO();
lii.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
GetLastInputInfo(ref lii);
DateTime lastInputTime = bootTime.AddMilliseconds(lii.dwTime);
Run Code Online (Sandbox Code Playgroud)
经过的时间将只是:
TimeSpan idleTime = DateTime.UtcNow.Subtract(lastInputTime);
Run Code Online (Sandbox Code Playgroud)