程序运行时阻止Windows 10进入睡眠的VB.NET代码无效求助
解决VB.NET中SetThreadExecutionState无法阻止系统睡眠的问题
你的代码没能成功阻止系统睡眠,核心是两个关键问题没处理到位:
- 缺少
ES_CONTINUOUS标记:这个标记是告诉Windows持续维持当前唤醒状态,如果只传ES_SYSTEM_REQUIRED,它只会临时重置一次系统空闲计时器,之后系统还是会触发睡眠机制。 - 没有处理程序退出后的状态恢复:如果不手动重置状态,程序退出后系统可能会一直保持唤醒模式,影响正常的睡眠策略。
修正后的完整代码
Imports System.Runtime.InteropServices Public Class Form1 <FlagsAttribute()> Public Enum EXECUTION_STATE As UInteger ES_SYSTEM_REQUIRED = &H1 ES_DISPLAY_REQUIRED = &H2 ES_CONTINUOUS = &H80000000UI End Enum <DllImport("Kernel32.DLL", CharSet:=CharSet.Auto, SetLastError:=True)> Private Shared Function SetThreadExecutionState(ByVal state As EXECUTION_STATE) As EXECUTION_STATE End Function Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' 组合标记:持续保持系统和显示器处于唤醒状态 SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS Or EXECUTION_STATE.ES_SYSTEM_REQUIRED Or EXECUTION_STATE.ES_DISPLAY_REQUIRED) End Sub Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing ' 程序退出时恢复系统默认的睡眠策略 SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS) End Sub End Class
关键细节说明
ES_CONTINUOUS是核心:没有这个标记,你的调用只会一次性刷新空闲计时器,无法持续阻止睡眠。- 按需选择
ES_DISPLAY_REQUIRED:如果不需要阻止显示器关闭,可以去掉这个标记,只保留ES_CONTINUOUS | ES_SYSTEM_REQUIRED。 - 必须重置状态:程序关闭时一定要调用
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS),让系统恢复默认的睡眠逻辑,避免遗留异常状态。
你可以测试下这个修正后的代码,应该就能正常阻止系统进入睡眠/待机/休眠状态了。
内容的提问来源于stack exchange,提问作者frozenade
相关产品推荐
相关产品推荐

