如何解决如何防止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;
}
, 您有两种选择:
使用SetThreadExecutionState,它:
使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入睡眠状态或关闭显示器。
在哪里可以使用ES_SYSTEM_REQUIRED
标志
通过重置系统空闲计时器来强制系统进入工作状态。
使用SendInput伪造按键,鼠标移动/点击
另一个选择是将您的应用程序更改为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函数
由于它是Win32 API函数,因此要从C#中使用它,您需要PInvoke。这里介绍了这些步骤,包括示例方法PreventSleep
来临时禁用睡眠模式:
PInvoke.net:setthreadexecutionstate(内核32)
, 我认为没有任何方法可以直接在托管代码中执行此操作。
快速搜索显示了2年前的帖子。基本上,您需要进行一些互操作以调用原始Windows API。
, 这是SetThreadExecutionState
C#实现
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。