C# 如何防止Windows进入空闲状态?
我正在开发一个C#应用程序,它在后台运行,没有任何Windows控件 我想通知Windows我的应用程序仍处于活动状态,以防止Windows进入空闲状态 是否有任何API可从我的应用程序调用,以通知Windows操作系统我的应用程序仍处于活动状态C# 如何防止Windows进入空闲状态?,c#,windows,C#,Windows,我正在开发一个C#应用程序,它在后台运行,没有任何Windows控件 我想通知Windows我的应用程序仍处于活动状态,以防止Windows进入空闲状态 是否有任何API可从我的应用程序调用,以通知Windows操作系统我的应用程序仍处于活动状态 提前感谢。您可以使用此处介绍的SetThreadExecutionState: 因为它是一个Win32 API函数,所以要从C#使用它,需要PInvoke。这里描述了这些步骤,包括一个示例方法preventspeep,用于临时禁用睡眠模式:
提前感谢。您可以使用此处介绍的
SetThreadExecutionState
:
preventspeep
,用于临时禁用睡眠模式:
- 使用,其中:
使应用程序能够通知系统它正在使用,从而防止系统在应用程序运行时进入睡眠状态或关闭显示器
您可以使用
标志 通过重置系统空闲计时器,强制系统处于工作状态ES\u SYSTEM\u REQUIRED
- 用于模拟击键、鼠标移动/单击
- 另一种选择是将应用程序更改为Windows服务
// 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);
我不认为有任何方法可以直接在托管代码中实现这一点 快速搜索可以发现两年前的帖子。基本上,您需要执行一些互操作来调用原始的windows API 您必须使用函数。大概是这样的:
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;
}
下面是
SetThreadExecutionState
C#implementation请务必让您的用户知道应用程序需要持续运行,并防止Windows闲置。这对于使用笔记本电脑的用户尤其重要。在我们客户端的某些Windows XP计算机上,NativeMethods.SetThreadExecutionState从不返回0,知道吗?@Alessio-返回0
表示该方法失败。从SetThreadExecutionState
-“如果函数成功,返回值为上一个线程执行状态。如果函数失败,返回值为NULL。”(注意——我想你可能已经明白了这一点,但为了完整起见,我想发布一个答案,并帮助可能出现并查看你评论的其他人)在试图用运行windows 8.1的Surface Pro 3解决一个反复出现且难以解决的睡眠问题时,我可以清楚地说明,不幸的是,此解决方案在此操作系统上不适用于此问题。可能是我,但这在windows 10中似乎不适用于Win 10@ecklerpa中的我。此外,如果有人需要为可见的应用程序执行此操作,请说明离子,还记得设置所需的ES_DISPLAY_,以避免显示器关闭。