144 lines
5.3 KiB
C++
144 lines
5.3 KiB
C++
#pragma comment(linker, "/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
|
|
#include<windows.h>
|
|
#include<iostream>
|
|
#include<cstdlib>
|
|
#include<cstring>
|
|
#include<ctime>
|
|
using namespace std;
|
|
// 黑名单
|
|
const int BLACK_LIST_SIZE = 3;
|
|
string blackList[]={"哔哩哔哩","MuMu模拟器","知乎"};
|
|
int blackListTimeCount = 0;
|
|
const int MAX_BLACKLIST_TIME_COUNT = 1800;
|
|
const int TOLENT_MORE_TIME = 1200;
|
|
void saveData(){
|
|
// 保存黑名单时间到save.txt
|
|
FILE *fp = fopen("save.txt", "w");
|
|
if(fp!=NULL){
|
|
time_t timeNow = time(0);
|
|
tm *curTime = localtime(&timeNow);
|
|
if(curTime->tm_hour<4){
|
|
timeNow -= 86400;
|
|
curTime = localtime(&timeNow);
|
|
}
|
|
fprintf(fp, "%d %d %d %d", blackListTimeCount,curTime->tm_year,curTime->tm_mon,curTime->tm_mday);
|
|
fclose(fp);
|
|
}
|
|
}
|
|
bool beginWithMuteFlag=false;
|
|
void muteAll(){
|
|
keybd_event(VK_SPACE, 0, 0, 0);
|
|
Sleep(1);
|
|
keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0);
|
|
}
|
|
void unmuteAll(){
|
|
keybd_event(VK_SPACE, 0, 0, 0);
|
|
Sleep(1);
|
|
keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0);
|
|
}
|
|
int main(){
|
|
ShowWindow(GetConsoleWindow(), SW_HIDE);
|
|
system("chcp 936 >>nul");
|
|
FreeConsole();
|
|
srand((unsigned)time(0));
|
|
char title[1024];
|
|
// 从save.txt中读取黑名单时间
|
|
FILE *fp = fopen("save.txt", "r");
|
|
if(fp!=NULL){
|
|
int curYear,curMonth,curDay;
|
|
fscanf(fp, "%d%d%d%d", &blackListTimeCount,&curYear,&curMonth,&curDay);
|
|
time_t timeNow = time(0);
|
|
tm *curTime = localtime(&timeNow);
|
|
if(curTime->tm_hour<4){
|
|
timeNow -= 86400;
|
|
curTime = localtime(&timeNow);
|
|
}
|
|
if(curTime->tm_year!=curYear||curTime->tm_mon!=curMonth||curTime->tm_mday!=curDay){
|
|
blackListTimeCount = 0;
|
|
}
|
|
fclose(fp);
|
|
}
|
|
cout<<"Hello, Self Monitor!";
|
|
while(true){
|
|
// 判断时间如果是早上四点就重置
|
|
time_t now = time(0);
|
|
tm *ltm = localtime(&now);
|
|
if(ltm->tm_hour==4&<m->tm_min==0){
|
|
blackListTimeCount = 0;
|
|
}
|
|
// 获取顶层窗口名称
|
|
HWND hwnd = GetForegroundWindow();
|
|
if (hwnd == NULL) {
|
|
continue;
|
|
}
|
|
if(GetWindowTextA(hwnd, title, 1024) == 0){
|
|
cout<<"GetWindowTextW failed"<<endl;
|
|
cout<<"hwnd: "<<hwnd<<endl;
|
|
cout<<"Error code: "<<GetLastError()<<endl;
|
|
Sleep(1000);
|
|
continue;
|
|
}
|
|
cout<<"*"<<title<<endl;
|
|
// 判断是否在黑名单中
|
|
bool isInBlackList = false; string strTitle = title;
|
|
for(int i=0;i<BLACK_LIST_SIZE;i++){
|
|
if(strTitle.find(blackList[i])!=string::npos){
|
|
isInBlackList = true;
|
|
break;
|
|
}
|
|
}
|
|
cout<<"*"<<title<<endl<<isInBlackList<<endl;
|
|
if(isInBlackList){
|
|
cout<<hwnd<<','<<title<<"\n";
|
|
blackListTimeCount++;
|
|
if(blackListTimeCount>=MAX_BLACKLIST_TIME_COUNT){
|
|
muteAll();
|
|
bool isContinue = true;
|
|
isContinue = MessageBoxA(hwnd, "半小时到了!你确定你需要继续看这个?", "半个小时提醒", MB_YESNO) == IDYES;
|
|
if(isContinue){
|
|
MessageBoxA(hwnd, "如果你真的确定的话,按照我的指令连续点十次:", "唉,拿你没办法呢", MB_OK);
|
|
for(int i=0;i<10;i++){
|
|
int randNum = rand()&1;
|
|
if(randNum){
|
|
isContinue = MessageBoxA(hwnd, "先思考一下,你现在真的有用电脑的必要吗?\n你现在应该做什么?\n想好了按确认", "请思考请思考", MB_YESNO) == IDYES;
|
|
}else{
|
|
isContinue = MessageBoxA(hwnd, "先思考一下,你现在真的有用电脑的必要吗?\n你现在应该做什么?\n想好了按取消", "请思考请思考", MB_YESNO) == IDNO;
|
|
}
|
|
if(!isContinue){
|
|
MessageBoxA(hwnd, "看来你并没有真正下定决心呢……", "叹气……", MB_OK);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
unmuteAll();
|
|
if(isContinue){
|
|
MessageBoxA(hwnd, "好吧,看来你确实有急事,去忙吧,你再用二十分钟后我还会回来的!", "你先忙吧", MB_OK);
|
|
blackListTimeCount = MAX_BLACKLIST_TIME_COUNT - TOLENT_MORE_TIME;
|
|
}else{
|
|
MessageBoxA(hwnd, "根据千嶂夹城制定的反摸鱼条例,你今天不准再摸鱼了!\n你有五秒钟保存重要文件,我数到五就强制关掉!","True Ending",MB_OK);
|
|
Sleep(5*1000);
|
|
// 强制关闭hwnd窗口
|
|
PostMessageA(hwnd, WM_CLOSE, 0, 0);
|
|
}
|
|
}else if(blackListTimeCount%600==0){
|
|
muteAll();
|
|
MessageBoxA(hwnd, "你摸鱼已经十分钟了,冰澄命令你停下!", "十分钟提醒", MB_OK);
|
|
unmuteAll();
|
|
}else if(blackListTimeCount%300==0){
|
|
muteAll();
|
|
MessageBoxA(hwnd, "你在摸鱼吗,又摸了五分钟了,冰澄提醒你正确休息", "五分钟提醒", MB_OK);
|
|
unmuteAll();
|
|
}
|
|
}
|
|
// 延时
|
|
Sleep(1000);
|
|
static int clockCount = 0;
|
|
clockCount++;
|
|
if(clockCount%60==0){
|
|
saveData();
|
|
}
|
|
// cout<<title<<endl;
|
|
// cout<<"blackListTimeCount: "<<blackListTimeCount<<endl;
|
|
}
|
|
return 0;
|
|
} |