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

时间:2013-12-23 09:44:20

标签: c#

如何在C#Desktop Application

上查找我的计算机空闲时间(空闲时间)

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

有没有办法解决这个问题?

2 个答案:

答案 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.