zoukankan      html  css  js  c++  java
  • 一条数据引发的问题

    一、问题点

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

      其实这个问题点有两个需要解决的问题:、

    1. 软件在使用的标准是什么?
    2. 如何知道电脑什么时候从运行状态进入休眠/睡眠状态,或从休眠/睡眠状态进入运行状态?

    二、软件在使用的标准

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

                   

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

    三、如何知道电脑处于休眠/睡眠还是运行状态:

    • windows系统是消息驱动,而且在Windows事件日志中记录着很多执行过的事件详细信息,其中就包括休眠/睡眠事件。 通过Windows系统自带的事件查看器,可以看到很多事件信息:发生时间、来源以及事件ID。系统也为我们提供了相关的api获取需要的事件信息。ReadEventLog:读取指定的事件日志信息;

                      

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

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

    • Windows是靠消息驱动的,那么是否存在休眠/睡眠唤醒状态转换的消息呢,答案是有的,Windows就提供了相关的消息:WM_POWERBROADCAST  wparam参数确定了休眠/睡眠 唤醒状态。只要在启动进程前创建一个窗口线程,监听这个消息,就能判断出状态是否发生改变,设置标志变量,进行逻辑处理。

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

  • 相关阅读:
    codeforces-1194 (div2)
    单链表1(悲剧文本)
    迷宫(深度搜索)
    皇后问题
    关键路径
    [NOI2015]软件包管理器
    [USACO13JAN]岛游记Island Travels
    仓鼠找sugar
    [SHOI2012]魔法树
    [HEOI2016/TJOI2016]树
  • 原文地址:https://www.cnblogs.com/smartNeo/p/11343080.html
Copyright © 2011-2022 走看看