CatCoding

在显示器前干了什么

2011-02-22

时间啊时间

写论文头大,翻资料找到一个以前写的小东西。有段时间在实验室,一坐就是一整天,经常在网上找找资料,找着找着就从一个链接点到另一链接,从豆瓣到 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;


    <span style="color: #00bfff; font-weight: bold;">return</span> 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 ,匈牙利命名法好难看。

screenscreen

公号同步更新,欢迎关注👻
Tags: Backup