C++ Windows的锁屏与屏保(一)

  1. 如何收到windows的屏保与锁屏的通知?
    使用ISensLogon,关于IsensLogon的介绍可以参考MSDN微软官方文档
    (https://docs.microsoft.com/en-us/windows/win32/api/sensevts/nn-sensevts-isenslogon)
    这里我们使用其中的四个接口来分别处理锁屏,解锁屏,屏保,解除屏保的消息。登录和注销也可以用这个接口。

    1636279981(1).png

    由于不了解COM的使用,不知道怎么使用。这里我写了一个demo来记录如何使用。毕竟先学会使用,再去探究原理,以后有空再补上。demo可以参考:
    github: (https://github.com/zhaoguohan123/Blog)
    CSDN:https://download.csdn.net/download/qq_15723485/38121988
    把整个工程克隆到本地。所有代码都在ISensWinlogon/TestSens.cpp中,部分公共函数在Common文件中。这里整体对代码进行一下说明:
    (1) 在main函数中创建一个不可见的窗口
    1636280502(1).png

    (2) 窗口创建后,会发送一次WM_CREATE消息,然后我们在消息中做初始化操作
    image.png

    (3) 实现ISensLogon中的回调方法,这我们收到锁屏和屏保后,使用debugview输出日志信息。也可以在这里面实现其他的功能
    image.png

    就这么三步很简单!!

  2. 实验效果:
    首先运行编译出来的exe进程,打开debugview,然后使用锁屏,屏保等,消息都会打印出来


    ISensLogon1.png

    ISensLogon2.png
  3. 注意以及其他:
    (1)使用ISenslogon,需要降Sens服务打开


    image.png

    (2)初始化可以放在主线程中,或者在新的线程中。如果放在了线程中,一定要将下面的消息分发放在死循环中。例如:
    while(1){
    MSG msg;
    ....
    ....
    }


    image.png

    (3)接受消息后,在回调中操作一定要是异步的,否则会阻塞线程导致,后续的消息无法收到

码字不易,希望大家能在github上给一个star哈

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容