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

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

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

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

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

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

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

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

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

    就这么三步很简单!!

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

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

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

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

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

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

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

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

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

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容