【发布时间】:2015-10-01 19:00:36
【问题描述】:
我使用如下 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 分钟内激活和阻止。这将像一个循环。喜欢
我想防止 Windows 仅在 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 分钟后激活睡眠”?
提前谢谢!
【问题讨论】:
-
没有合理的非破解方式,因为您违反了用户设置。您要么定义您的线程“如此重要”以使系统保持活动状态,要么您尊重用户设置。您要做的是覆盖系统配置中的用户设置。因此,您的问题的正确答案是:指示用户将睡眠时间设置为您想要的值(40 分钟),如果他们不想这样做,请尊重这一点。
-
好问题,但请谨慎使用您的术语。你所指的“函数”实际上是“子程序”。