↓ 跳过正文

Windows防锁屏工具技术实现

正能量 2 分钟阅读 更新于 2026-10-18

解释 Windows 防休眠 API 示例的能力边界,区分系统休眠、显示器电源与账户锁定策略。

Windows防锁屏工具技术实现:原站配图。

开发背景
#

在企业IT安全管理中,部分公司会设置5分钟自动锁屏策略。频繁的密码解锁操作虽保障了安全,但影响了工作效率。为此开发本工具,核心特点:

  • 无需管理员权限
  • 单文件绿色运行
  • 系统托盘常驻

实现代码
#

系统托盘模块 (main.go)
#

package main

import (
    _ "embed"
    "fmt"
    "github.com/getlantern/systray"
    "time"
)

//go:embed icon.ico  // 必须确保存在图标文件
var iconData []byte

func main() {
    PreventSleep()     // 启动防锁屏
    systray.Run(onReady, onExit)
}

// 托盘初始化
func onReady() {
    systray.SetIcon(iconData)          // 设置托盘图标
    systray.SetTitle("Anti-Lock")      // 任务栏悬停显示
    systray.SetTooltip("运行中")        // 状态提示
    
    // 创建退出菜单项
    quitMenu := systray.AddMenuItem("退出", "关闭防锁屏功能")

    // 异步监听菜单事件
    go func() {
        <-quitMenu.ClickedCh
        systray.Quit()
    }()
}

func onExit() {
    fmt.Println("程序已安全退出") 
}

防锁屏核心模块
#

package main

import (
    "syscall"
)

const (
    ES_CONTINUOUS       = 0x80000000  // 持续生效标志
    ES_SYSTEM_REQUIRED  = 0x00000001  // 阻止系统休眠
    ES_DISPLAY_REQUIRED = 0x00000002  // 阻止显示器关闭
)

// PreventSleep 调用Windows API实现防锁屏
func PreventSleep() {
    kernel32 := syscall.NewLazyDLL("kernel32.dll")
    execStateAPI := kernel32.NewProc("SetThreadExecutionState")
    
    // 组合控制参数
    flags := uintptr(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED)
    ret, _, _ := execStateAPI.Call(flags)
    
    if ret == 0 {
        panic("API调用失败") 
    }
}

使用说明
#

  1. 准备图标
    将icon.ico图标文件与main.go放在同一目录

  2. 编译命令

    go build  -ldflags="-s -w -H=windowsgui" -o Sleep.exe
  3. 运行效果

    • 双击运行生成的.exe文件
    • 系统托盘区显示图标
    • 右键点击可退出程序

补充阅读
#

解释 Windows 防休眠 API 示例的能力边界,区分系统休眠、显示器电源与账户锁定策略。

如何理解与使用
#

系统执行状态请求与企业账户锁定策略不是同一机制;示例不应被理解为能够覆盖所有组策略或安全限制。

验证与边界
#

测试目标系统上的实际电源行为,并确认退出程序后恢复原来的状态;如涉及组织管理设备,应遵守适用的管理规则。