防止工作站休眠的实用工具

在某些情况下,防止计算机进入睡眠状态是必要的。例如,当工作站正在执行第三方模型运行时,如果工作站在运行过程中进入睡眠模式,可能会导致严重的问题。在这种情况下,即使本地电源设置被设置为不休眠,域策略也可能覆盖这些设置,导致工作站仍然会进入睡眠状态。

本文介绍的解决方案是一个使用Visual Basic2010编写的实用工具,它通过调用SetThreadExecutionState API来通知系统工作站正在使用中,从而防止系统进入睡眠状态或关闭显示器。通常情况下,系统会自动检测到本地键盘或鼠标输入、服务器活动以及窗口焦点变化(所有这些活动都会阻止系统进入睡眠状态)。但是,磁盘、CPU活动和视频显示等活动并不会被系统自动检测到(长时间运行的进程也不足以保持系统唤醒)。

代码工作原理

该应用程序在窗体加载时调用一次SetThreadExecutionState API。只要这个应用程序在运行,系统就不会进入睡眠状态(或关闭显示器)。

' API调用以防止休眠(直到应用程序退出) Private Declare Function SetThreadExecutionState Lib "kernel32" _ ( ByVal esFlags As EXECUTION_STATE ) As EXECUTION_STATE ' 定义API执行状态 Private Enum EXECUTION_STATE ' 通过重置显示空闲计时器保持工作状态 ES_SYSTEM_REQUIRED = &H1 ' 通过重置系统空闲计时器强制显示开启 ES_DISPLAY_REQUIRED = &H2 ' 强制此状态,直到下一次ES_CONTINUOUS调用 ' 并且清除其中一个其他标志 ES_CONTINUOUS = &H80000000 End Enum ' 窗体加载时防止休眠 Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load No_Sleep() End Sub ' 调用API - 强制不休眠且不关闭显示器 Private Function No_Sleep() As EXECUTION_STATE Return SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED Or _ EXECUTION_STATE.ES_CONTINUOUS Or EXECUTION_STATE.ES_DISPLAY_REQUIRED) End Function

API执行状态(ES_SYSTEM_REQUIRED、ES_DISPLAY_REQUIRED和ES_CONTINUOUS)的详细解释可以在找到。

应用程序中有一个按钮,每五秒钟闪烁一次红色(用户喜欢知道有事情在发生)。

' 闪烁按钮(让用户知道它仍在运行) Private Sub NoSleep_Timer_Tick(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles NoSleep_Timer.Tick Dim Save_BackColor As Color = Status_Button.BackColor Status_Button.BackColor = Color.Red Me.Update() Thread.Sleep(500) ' 保持按钮红色一段时间 Status_Button.BackColor = Save_BackColor Me.Update() End Sub

用户可以通过双击应用程序来将应用程序最小化到系统托盘。当应用程序最小化时,会显示一个气球提示,以便用户知道使用了哪个图标。

' 如果窗体双击,则最小化到托盘 Private Sub Form1_DoubleClick(sender As Object, _ e As System.EventArgs) Handles Me.DoubleClick MinimizeAppToTray() End Sub ' 隐藏应用程序窗体 Private Sub MinimizeAppToTray() Me.Hide() NoSleep_NotifyIcon.Visible = True ' 显示气球文本一段时间,当应用程序最小化时 NoSleep_NotifyIcon.ShowBalloonTip(16000) End Sub

用户可以通过双击系统托盘图标来再次显示应用程序窗口,或者右键单击图标来关闭应用程序(有关这些功能的完整源代码,请参见)。

测试与兼容性

文件完整性校验

MD5 8397eb0bd800b2ed16dce95c92d2646c
SHA-1 0e679fcb8ef3e34f7528ecb72f963b7d33810a37
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485