码迷,mamicode.com
首页 > 其他好文 > 详细

一条数据引发的问题

时间:2019-08-12 23:49:12      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:windows系统   获取   http   而且   任务   tps   逻辑   状态   显示   

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

其实这个问题点有两个需要解决的问题: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

 

一条数据引发的问题

标签:windows系统   获取   http   而且   任务   tps   逻辑   状态   显示   

原文地址:https://www.cnblogs.com/smartNeo/p/11343080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!