如何防止Windows进入闲置状态?

我正在处理一个C#应用程序,在后台运行没有任何Windows控制。

我想通知Windows我的应用程序仍然活着,以防止Windows进入空闲状态。

有没有任何API可以从我的应用程序调用,通知Windows操作系统,我的应用程序还活着?

提前致谢。

你必须使用SetThreadExecutionState函数。 像这样的东西:

public partial class MyWinForm: Window { private uint fPreviousExecutionState; public Window1() { InitializeComponent(); // Set new state to prevent system sleep fPreviousExecutionState = NativeMethods.SetThreadExecutionState( NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED); if (fPreviousExecutionState == 0) { Console.WriteLine("SetThreadExecutionState failed. Do something here..."); Close(); } } protected override void OnClosed(System.EventArgs e) { base.OnClosed(e); // Restore previous state if (NativeMethods.SetThreadExecutionState(fPreviousExecutionState) == 0) { // No way to recover; already exiting } } } 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; } 

你有几个select:

  • 使用SetThreadExecutionState ,其中:

    使应用程序能够通知系统正在使用,从而防止系统在应用程序运行时进入睡眠状态或closures显示器。

    您可以在哪里使用ES_SYSTEM_REQUIRED标志

    通过重置系统空闲计时器强制系统处于工作状态。

  • 使用SendInput来伪造按键,鼠标移动/点击

  • 另一种select是将您的应用程序更改为Windows服务。

SetThreadExecutionState示例

 // Television recording is beginning. Enable away mode and prevent // the sleep idle time-out. SetThreadExecutionState( ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED); // Wait until recording is complete... // Clear EXECUTION_STATE flags to disable away mode and allow the system // to idle to sleep normally. SetThreadExecutionState(ES_CONTINUOUS); 

你可以使用SetThreadExecutionState描述的SetThreadExecutionState

  • SetThreadExecutionState函数

由于它是一个Win32 API函数,所以要从C#使用它,你需要PInvoke它。 这里描述的步骤包括一个示例方法PreventSleep临时禁用睡眠模式:

  • PInvoke.net:setthreadexecutionstate(kernel32)

我不认为有任何方法直接在托pipe代码中执行此操作。

快速search显示这个职位从2年前。 基本上你需要做一些互操作来调用一个原始的Windows API。

这里是SetThreadExecutionState C#实现