golang windows 判断锁屏

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
}

转载于:https://www.cnblogs.com/yeshou/p/5223635.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值