【Go 语言社区】转-golang windows 判断锁屏

时间:2022-05-04
本文章向大家介绍【Go 语言社区】转-golang windows 判断锁屏,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
package osapi
import (
    "syscall"
    "unsafe"
    "github.com/lxn/win"
)
const (
    DESKTOP_SWITCHDESKTOP = 0x0100 // The access to the desktop
)
// get desktop locked status
func ScreenIsLocked() bool {
    // load user32.dll only once
    user32 := win.MustLoadLibrary("user32.dll")
    openDesktop := win.MustGetProcAddress(user32, "OpenDesktopW")
    closeDesktop := win.MustGetProcAddress(user32, "CloseDesktop")
    switchDesktop := win.MustGetProcAddress(user32, "SwitchDesktop")
    var lpdzDesktopPtr uintptr = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("Default"))) //string
    var dwFloatsPtr uintptr = 0                                                               //uint32
    var fInheritPtr uintptr = 0                                                               //boolean
    var dwDesiredAccessPtr uintptr = uintptr(DESKTOP_SWITCHDESKTOP)                           //uint32
    r1, _, _ := syscall.Syscall6(openDesktop, 4, lpdzDesktopPtr, dwFloatsPtr, fInheritPtr, dwDesiredAccessPtr, 0, 0)
    if r1 == 0 {
        panic("get desktop locked status error")
    }
    res, _, _ := syscall.Syscall(switchDesktop, 1, r1, 0, 0)
    // clean up
    syscall.Syscall(closeDesktop, 1, r1, 0, 0)
    return res != 1
}