如何在C#Desktop Application
上查找我的计算机空闲时间(空闲时间)空闲时间是计算机或设备开机但未使用的总时间。如果计算机或计算机设备闲置一段时间,它可能会进入待机模式或关闭电源。
有没有办法解决这个问题?
答案 0 :(得分:8)
如果空闲,则表示从上次用户输入开始经过的时间(如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);
答案 1 :(得分:-1)
根据您的UI框架(您未指定),您需要捕获WM_ENTERIDLE
消息并存储接收消息的时间。
你应该如何捕捉这条消息? These guys will tell you for to do it in winforms.