-
如何收到windows的屏保与锁屏的通知?
使用ISensLogon,关于IsensLogon的介绍可以参考MSDN微软官方文档
(https://docs.microsoft.com/en-us/windows/win32/api/sensevts/nn-sensevts-isenslogon)
这里我们使用其中的四个接口来分别处理锁屏,解锁屏,屏保,解除屏保的消息。登录和注销也可以用这个接口。
由于不了解COM的使用,不知道怎么使用。这里我写了一个demo来记录如何使用。毕竟先学会使用,再去探究原理,以后有空再补上。demo可以参考:
github: (https://github.com/zhaoguohan123/Blog)
CSDN:https://download.csdn.net/download/qq_15723485/38121988
把整个工程克隆到本地。所有代码都在ISensWinlogon/TestSens.cpp中,部分公共函数在Common文件中。这里整体对代码进行一下说明:
(1) 在main函数中创建一个不可见的窗口
(2) 窗口创建后,会发送一次WM_CREATE消息,然后我们在消息中做初始化操作
(3) 实现ISensLogon中的回调方法,这我们收到锁屏和屏保后,使用debugview输出日志信息。也可以在这里面实现其他的功能
就这么三步很简单!! -
实验效果:
首先运行编译出来的exe进程,打开debugview,然后使用锁屏,屏保等,消息都会打印出来
-
注意以及其他:
(1)使用ISenslogon,需要降Sens服务打开
(2)初始化可以放在主线程中,或者在新的线程中。如果放在了线程中,一定要将下面的消息分发放在死循环中。例如:
while(1){
MSG msg;
....
....
}
(3)接受消息后,在回调中操作一定要是异步的,否则会阻塞线程导致,后续的消息无法收到
码字不易,希望大家能在github上给一个star哈