我使用以下c#代码来防止睡眠和监控关闭:
internal static class NativeMethods
{
// Import SetThreadExecutionState Win32 API and necessary flags
[DllImport("kernel32.dll")]
public static extern uint SetThreadExecutionState(uint esFlags);
public const uint ES_CONTINUOUS = 0x80000000;
public const uint ES_SYSTEM_REQUIRED = 0x00000001;
public const uint ES_DISPLAY_REQUIRED = 0x00000002;
}
并在Formload上调用此函数:
private void PreventSleep()
{
NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED);
}
private void PreventMonitorOff()
{
NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_DISPLAY_REQUIRED);
}
这种代码方式让我永无止境。我想要的是时间限制。
如果没有使用电脑的用户,请说40分钟后睡觉。我想在40分钟后停用这些功能。然后当用户完成使用计算机我想激活并在40分钟内阻止。它就像一个循环。像
我想阻止窗户在40分钟内进入睡眠状态,然后如果没有使用电脑的用户那样照常睡觉。然后,当计算机没有用户时,我想在40分钟后等待它再次入睡。
我尝试使用间隔为2400000(40分钟)的计时器:
private void timer1_Tick(object sender, EventArgs e)
{
PreventSleep();
PreventMonitorOff();
}
并调用这些功能:
private void Form1_Load(object sender, EventArgs e)
{
timer1.Start();
}
如何使用这些函数进行循环,并且此代码将知道"现在有鼠标或键盘移动并在40分钟后激活睡眠"?
提前谢谢!
答案 0 :(得分:0)
使用ES_CONTINUOUS
,您无需定期拨打电话。
因此,将计时器设置为40分钟,然后删除ES_CONTINOUS
标志(请参阅MSDN)。难点在于检测用户是否实际上处于空闲状态。如果你没有特定的行动来确定这一点,那么最好让操作系统做出决定。您可以使用powercfg API来强制超时。