一条数据引发的问题

问题点:需要统计三方软件使用的时长,但是要求在电脑处于休眠/睡眠状态下的时间段不能作为使用时长统计进去。

其实这个问题点有两个需要解决的问题:1、软件在使用的标准是什么?2、如何知道电脑什么时候从运行状态进入休眠/睡眠状态,或从休眠/睡眠状态进入运行状态?

问题一:软件在使用的标准,这个不是我今天主要讲解的重点,在这里只是提供一个简单的方案:拿到当前桌面显示的窗口(同一应用的不同窗口,只能作为一个应用),可以参考Windows自带的任务管理器查看到:

               

被红色线圈中的就是需要的。

问题二:如何知道电脑处于休眠/睡眠还是运行状态:

             1、windows系统是消息驱动,而且在Windows事件日志中记录着很多执行过的事件详细信息,其中就包括休眠/睡眠事件。

                  通过Windows系统自带的事件查看器,可以看到很多事件信息:发生时间、来源以及事件ID。

                 系统也为我们提供了相关的api获取需要的事件信息。ReadEventLog:读取指定的事件日志信息;

                  

             通过相关api,获取到系统休眠/睡眠时间,比较之前的休眠/睡眠时间,判断出电脑是否出从休眠/睡眠状态到运行状态。

                 好像问题就这么解决了,但是忽略了一个问题,就是时序的问题。如果每次计算软件使用时长都要去获取是否从休眠/睡眠到唤醒状态,存在这样一种情况:当运行到读取休眠/睡眠到幻想状态后,统计软件使用时长前,电脑休眠了,

                 等到唤醒后,就会将休眠的时间统计进去(如果设计的方式不够好的话)。

               2、Windows是靠消息驱动的,那么是否存在休眠/睡眠唤醒状态转换的消息呢,答案是有的,Windows就提供了相关的消息:WM_POWERBROADCAST  wparam参数确定了休眠/睡眠 唤醒状态。

                    只要在启动进程前创建一个窗口线程,监听这个消息,就能判断出状态是否发生改变,设置标志变量,进行逻辑处理。

参考资料:https://blog.csdn.net/wangkui1331/article/details/79446505

 

转载于:https://www.cnblogs.com/smartNeo/p/11343080.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值