HelloWood

Go 调用 Windows 的系统 API,检测是否锁屏

2019-09-15

Go 调用 Windows 的系统 API,检测是否锁屏

因为应用需要根据当前电脑是否处于活跃状态来执行不同的动作,所以需要获取电脑当前活跃的窗口判断是否处于锁屏
可以通过调用Windows 的库来执行相应的API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import (
"log"
"syscall"
)

func main() {
const successCallMessage = "The operation completed successfully."
// 加载类库
user32 = syscall.NewLazyDLL("user32.dll")
// 创建新的调用进程
getForegroundWindow = user32.NewProc("GetForegroundWindow")
// 调用相应的函数
activeWindowId, _, err := getForegroundWindow.Call()

if err != nil && err.Error() != successCallMessage {
log.Println(err)
}
log.Println("activeWindowId:", activeWindowId)
}

当调用成功后时,会返回三个结果,第一个是当前活跃的窗口 ID,当 ID 为 0 时,就说明处于锁屏状态;第三个参数是操作信息,如果成功内容就是The operation completed successfully.

这个函数没有入参,所以直接通过Call()调用,函数的详细信息可以参考微软提供的API GetForegroundWindow function

其他的函数调用也是一样,不同的是传入的参数和返回的结果,但调用过程是一样的

参考文章

Tags: Go