最近发现,我浪费的时间很多,每天的日常就是:
每次打开带电脑之后都是玩手机,基本不会去使用电脑学习,所以我决定监视一下自己一天之中使用电脑的时间。
实现思路通过记录鼠标的运动以及键盘的输入来判断是否正在使用电脑:
- 每过一分钟检测一下鼠标的位置,如果鼠标的位置改变了,那么就判定为正在使用电脑,则时间就增加一分钟。
- 在一分钟之内的每一秒钟不断检测鼠标的点击或者键盘的输入,如果出现以上两种情况,那么就直接等待一分钟的计时结束,可以节约CPU的资源。设置为一分钟的每秒检测,而不是一直检测也是为了防止不断循环而导致占用CPU的资源。
每次运行都会将电脑的使用时间实时记录下来,保存在txt文件中。
最后将程序设置为开机自启。
代码#include "stdio.h" #include结果#include #include #include #include using namespace std; #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? true : false) int main() { POINT p; POINT last_p; // 定义总的学习时间:以分钟为单位 int study_time = 0; time_t timePointer; time(&timePointer); char temp[64]; // 将时间转化为年月日时分秒的格式 strftime(temp, sizeof(temp), "%Y%m%d_%H%M%S", localtime(&timePointer)); // 记录时间的文件 string record_txt = (string)temp + ".txt"; ofstream outfile(record_txt); if (!outfile) { cout << "filed to open filen"; exit(1); } while (true) { time_t timePointer; time(&timePointer); char temp[64]; strftime(temp, sizeof(temp), "%Y-%m-%d %H:%M:%S", localtime(&timePointer)); GetCursorPos(&last_p); //获取鼠标起始坐标 time_t now, later; time(&now); time(&later); bool keyboard = false; bool mouse = false; // 每60秒检测一次 while (later - now < 60) { // 检测鼠标位置 GetCursorPos(&p); //获取鼠标结束坐标 if (!(p.x == last_p.x && p.y == last_p.y)) mouse = true; // 检测键盘输入 for (int i = 1; i < 255; i++) { if (KEY_DOWN(i)) { keyboard = true; break; } } if (keyboard || mouse) Sleep(1000 * (59 + now - later)); Sleep(1000); time(&later); } if (mouse || keyboard) { study_time++; } outfile << (string)temp << " "; outfile << study_time << "mins" << endl; } outfile.close(); return 0; }
可以看到上面记录了每个时间。
- 创建一个文件,start.bat:
# /b是执行起来没有小黑框 start /b D:VScodePYmyselfstudy_time.exe
- 在start.bat相同的目录下创建一个文件,start.vbs:
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c start.bat",0
右击start.vbs,创建快捷方式。
3. 按下Win+R,输入shell:startup,将前面的start.vbs快捷方式移动到此目录下。
4. 完成!!!



