Yukang's Page

在显示器前干了什么

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 ,匈牙利命名法好难看。

screen

Tags: Backup
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章