在我的文件传输应用程序(WinSCP)中,我使用
我没有找到有关应用程序防止Windows 11进入睡眠模式的不同要求的任何参考资料。
我的应用程序是一个C ++ Win32应用程序。但我可以使用微不足道的.NET 5 WinForms C#应用程序复现同样的问题。
只要应用程序在Windows 10上运行,系统就不会进入睡眠模式。但是Windows 11会按计划进入睡眠模式。
在Windows 11上,Windows文件资源管理器在传输文件时可以成功阻止睡眠。因此,并非不可能防止Windows 11进入睡眠模式。
为什么在Windows 11上
SetThreadExecutionState(ES_SYSTEM_REQUIRED)
来防止系统在文件传输过程中进入睡眠模式。但这在Windows 11上不再起作用。我没有找到有关应用程序防止Windows 11进入睡眠模式的不同要求的任何参考资料。
我的应用程序是一个C ++ Win32应用程序。但我可以使用微不足道的.NET 5 WinForms C#应用程序复现同样的问题。
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Label label1;
public enum EXECUTION_STATE : uint
{
ES_SYSTEM_REQUIRED = 0x00000001
}
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern uint SetThreadExecutionState(EXECUTION_STATE esFlags);
// The timer ticks every second.
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = (int.Parse(label1.Text) + 1).ToString();
SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED);
}
只要应用程序在Windows 10上运行,系统就不会进入睡眠模式。但是Windows 11会按计划进入睡眠模式。
在Windows 11上,Windows文件资源管理器在传输文件时可以成功阻止睡眠。因此,并非不可能防止Windows 11进入睡眠模式。
为什么在Windows 11上
SetThreadExecutionState(ES_SYSTEM_REQUIRED)
不再起作用?是否有其他API可用于此任务?
ES_SYSTEM_REQUIRED
行为的更改,而不是ES_CONTINUOUS
。 - Martin Prikryl