当前位置: 正能量 » 代码编程 » Go语言 » Windows防锁屏工具技术实现

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防锁屏工具技术实现

相关文章

评论 (0)

7 + 2 =