为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

转 进程监视器

2017-12-20 7页 doc 20KB 29阅读

用户头像

is_260251

暂无简介

举报
转 进程监视器转 进程监视器 老早以前就要我编一个控制小孩玩电脑的程序。限制他玩游戏的方法很简 单,杀进程就可以了 这里已经用C++,借助MFC把这个功能封装到一个类里面了,功能注释里 面都写得很清楚,看懂此程序需要Windows编程基础。 class CProcMon { //公共方法 public: BOOL Stop();//开始监控 BOOL Start();//停止监控 BOOL WriteLog(char*szMsg);//写入信息到日志文件中 BOOL AddProcess(CString strProcess...
转 进程监视器
转 进程监视器 老早以前就要我编一个控制小孩玩电脑的程序。限制他玩游戏的方法很简 单,杀进程就可以了 这里已经用C++,借助MFC把这个功能封装到一个类里面了,功能注释里 面都写得很清楚,看懂此程序需要Windows编程基础。 class CProcMon { //公共方法 public: BOOL Stop();//开始监控 BOOL Start();//停止监控 BOOL WriteLog(char*szMsg);//写入信息到日志文件中 BOOL AddProcess(CString strProcessName); CProcMon(); virtual~CProcMon(); //公共属性 public: BOOL bWriteLog;//是否写入日志 char*m_szFileName;//日志文件的文件名 int interval;//监控时间周期(越短监控越频繁,越占用系统资源) BOOL(*pfnOnRestricted)(void);//当发现玩游戏时调用的函数 //私有属性 : private inline void ErrorMessage(LPSTR strMsg);//提示错误信息,内联函数 enum STATUS{RUNNING,STOPPED}; STATUS status;//当前线程运行状态 CWinThread*m_pThread;//线程对象 CList CString,CString m_lstForbidden;//限制运行的程序列表 static UINT ThreadProc(LPVOID lParam);//线程函数 }; CProcMon:CProcMon() { status=STOPPED; interval=10; m_pThread=NULL; m_szFileName=NULL; pfnOnRestricted=NULL; } CProcMon:~CProcMon() { } /////////////////////////////Operations////////////////////////// /// UINT CProcMon:ThreadProc(LPVOID lParam) { CProcMon*pMain=(CProcMon*)lParam; pMain-status=RUNNING; //枚举进程 while(1) { PROCESSENTRY32 pe32; HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL); if(hSnap==INVALID_HANDLE_VALUE) { ERROR_MESSAGE("创建进程映像失败~"); } pe32.dwSize=sizeof(PROCESSENTRY32); if(~Process32First(hSnap,&pe32)) { ERROR_MESSAGE("枚举进程失败~"); } do { int i=0; POSITION pos=pMain-m_lstForbidden.GetHeadPosition(); //查找禁止进程并关闭 for(i=0;i pMain-m_lstForbidden.GetCount();i++) { CString str; str=pMain-m_lstForbidden.GetNext(pos); TRACE("\n[查找]%s,[当前]%s",str,pe32.szExeFile); //如果找到对应进程则关闭 if(str.Find(_strlwr(pe32.szExeFile))~=-1) { TRACE("\n\t找到对应进程~现在即将关闭进程."); if(pMain-bWriteLog) { char szMsg[1024]; sprintf(szMsg,"发现玩游戏:[%s]\n",pe32.szExeFile); pMain-WriteLog(szMsg); } HANDLE hProcess; if(pMain-pfnOnRestricted~=NULL&&pMain-pfnOnRestricted()==TRUE) { hProcess=OpenProcess(PROCESS_ALL_ACCESS,NULL,pe32.th32ProcessID); if(hProcess) { TerminateProcess(hProcess,-1); CloseHandle(hProcess); } } } } }while(Process32Next(hSnap,&pe32)~=NULL); TRACE("\n休息一会儿."); Sleep(pMain-interval*1000); } return 0; } AddProcess(CString strProcessName) BOOL CProcMon: { m_lstForbidden.AddTail(strProcessName); TRACE("m_lstForbidden.GetCount:%d\n",m_lstForbidden.GetCount()); return TRUE; } BOOL CProcMon:Start() { if(status==RUNNING) { return FALSE; } m_pThread=AfxBeginThread(ThreadProc,this); //m_hThread=CreateThread(NULL,NULL,ThreadProc,this,NULL,&m_dwThre adId); if(m_pThread==NULL) { ERROR_MESSAGE("创建线程时发生错误~"); return FALSE; } else { return TRUE; } } BOOL CProcMon:Stop() { if(status~=RUNNING) return FALSE; if(TerminateThread(m_pThread-m_hThread,-1)==0) { ERROR_MESSAGE("终止线程时出错"); return FALSE; } else { status=STOPPED; return TRUE; } } BOOL CProcMon:WriteLog(char*szMsg) { char szBuffer[2048]; CFile logFile; SYSTEMTIME sysTime={0}; GetLocalTime(&sysTime); if(m_szFileName==NULL) { ErrorMessage("请指定日志文件名~"); return FALSE; } //使用追加方式写文件 if(~logFile.Open(m_szFileName,CFile:modeWrite|CFile: modeCreate|CFile:modeNoTruncate)) { ErrorMessage("打开日志文件失败~"); return FALSE; } //开始写入文件 logFile.SeekToEnd(); //将字符串写入临时缓冲区中 sprintf(szBuffer,"[%d年%2d月%2d日]【%2d时%2d分%2d秒】【游戏】 \t%s",sysTime.wYear,sysTime.wMonth, sysTime.wDay,sysTime.wHour,sysTime.wMinute,sysTime.wSecond,szMsg); logFile.Write(szBuffer,strlen(szBuffer)); logFile.Flush(); logFile.Close(); return TRUE; } inline void CProcMon:ErrorMessage(LPSTR strMsg) { MessageBox(NULL,strMsg,TEXT("发生错误~"),MB_ICONERROR); }
/
本文档为【转 进程监视器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索