IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    在显示器前干了什么

    Yukang (moorekang@gmail.com)发表于 2011-02-22 00:00:00
    love 0

    时间啊时间

    写论文头大,翻资料找到一个以前写的小东西。有段时间在实验室,一坐就是一整天,经常在网上找找资料,找着找着就从一个链接点到另一链接,从豆瓣到Hoop,再弹出个QQ,一整个上午就过去了。天天对这显示器,于是就想我整天呆在这大部分时间在干什么了,要是有个记录就好了。就想写这么一个小程序,来记录我一天在电脑前花的时间分布。

    方法

    怎么实现呢。要知道现在在干什么,就应该要知道我现在在活动程序,编辑或者鼠标点击的。如何知道现在活动的程序名,如果能获得当前活动的程序的可执行文件的路径就比较好办了。于是在网上找了找,在Windows下可以这样实现。

    CString getProcPath(int PID)//返回pid进程的可执行程序名称
    {
            HANDLE hModule;
            MODULEENTRY32* minfo=new MODULEENTRY32;
            minfo->dwSize=sizeof(MODULEENTRY32);
            hModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,PID);//对系统进程进行拍照
    
            Module32First(hModule, minfo);//返回与进程相关的第一个模块信息
    
            CString str;
            str=CString(minfo->szExePath);
            CloseHandle(hModule);
            if(minfo) delete minfo;
    
            return str;
    }
    得到了当前活动的程序名称就比较好办了,其实经常用的就是那么几个程序,稍加分析然后分类就能统计到我的时间分布。我这里分为了四类:编程、上网、看文档、QQ。用个定时器记录下来即可。实现个托盘最小化,就可以了。
    void Report::Init()
    {
            m_Programming.push_back(_T("devenv.exe"));
            m_Programming.push_back(_T("Microsoft Visual Studio"));
            m_Programming.push_back(_T("vim"));
            m_Programming.push_back(_T("matlab"));
            m_Programming.push_back(_T("MATLAB"));
            m_OnWeb.push_back(_T("firefox"));
            m_OnWeb.push_back(_T("Chrome"));
            m_OnWeb.push_back(_T("IEXPLORE"));
            m_OnWeb.push_back(_T("opera"));
            m_QQ.push_back(_T("QQ"));
            m_QQ.push_back(_T("Tecent"));
            m_Document.push_back(_T("WINWORD"));
            m_Document.push_back(_T("Office"));
            m_Document.push_back(_T("CAJView"));
            m_Document.push_back(_T("hh.exe"));
            m_Document.push_back(_T("FOXITR"));
    
    }

    结论

    是个有点无聊的东西。其实可以稍微完善一下,比如加一个定时通知休息的功能、或者是上网过久的通知、便签之类的小功能也可以呵。代码 :Workingtime ,匈牙利命名法好难看。

    screen



沪ICP备19023445号-2号
友情链接