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
}