C# 系统空闲时间-Windows服务
我正在使用Windows服务,需要知道本地机器空闲了多长时间。我尝试过标准的Qt方法,但是因为服务是作为LocalSystem运行的,所以它不注册本地用户活动C# 系统空闲时间-Windows服务,c#,windows-services,C#,Windows Services,我正在使用Windows服务,需要知道本地机器空闲了多长时间。我尝试过标准的Qt方法,但是因为服务是作为LocalSystem运行的,所以它不注册本地用户活动 当应用程序作为LocalSystem运行时,有没有关于如何获取机器空闲状态的想法?不确定这是否有帮助。第条: 由于我们使用的是非托管库,因此首先是附加的using语句: using System.Runtime.InteropServices; // Unmanaged function from user32.dll [Dll
当应用程序作为LocalSystem运行时,有没有关于如何获取机器空闲状态的想法?不确定这是否有帮助。第条: 由于我们使用的是非托管库,因此首先是附加的using语句:
using System.Runtime.InteropServices;
// Unmanaged function from user32.dll
[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
// Struct we'll need to pass to the function
internal struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
private void tmrIdle_Tick(object sender, EventArgs e)
{
// Get the system uptime
int systemUptime = Environment.TickCount;
// The tick at which the last input was recorded
int LastInputTicks = 0;
// The number of ticks that passed since last input
int IdleTicks = 0;
// Set the struct
LASTINPUTINFO LastInputInfo = new LASTINPUTINFO();
LastInputInfo.cbSize = (uint)Marshal.SizeOf(LastInputInfo);
LastInputInfo.dwTime = 0;
// If we have a value from the function
if (GetLastInputInfo(ref LastInputInfo))
{
// Get the number of ticks at the point when the last activity was seen
LastInputTicks = (int)LastInputInfo.dwTime;
// Number of idle ticks = system uptime ticks - number of ticks at last input
IdleTicks = systemUptime - LastInputTicks;
}
// Set the labels; divide by 1000 to transform the milliseconds to seconds
lblSystemUptime.Text = Convert.ToString(systemUptime / 1000) + " seconds";
lblIdleTime.Text = Convert.ToString(IdleTicks / 1000) + " seconds";
lblLastInput.Text = "At second " + Convert.ToString(LastInputTicks / 1000);
}
可能的重复我假设你会在计算空闲时间之前检测是否有用户登录…Cassia似乎只使用终端服务器,而不是本地机器…我试过了,但它似乎查看了LocalSystem的不活动性,并报告系统自启动以来一直处于非活动状态…如果您查看我对您的问题的第一条评论,您将看到它使用相同的代码,但在用户登录时启动此过程。绝对是重复的问题。