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