MFC - 定时关闭一个软件
先来个效果图
关闭进程的方法:
int TerminateProcessFromId() //关闭进程 { BOOL bRet=FALSE; if(hProcess!=NULL) { bRet=::TerminateProcess(hProcess,0); } ::CloseHandle(hProcess); return 0; }
开始按钮的事件
void CchenDlg::OnBnClickedBtnStart() { // TODO: 在此添加控件通知处理程序代码 CString currPID; DWORD dwId;//当前PID m_currPID.GetWindowTextW(currPID); dwId = _ttoi(currPID); hProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwId); if(hProcess==NULL) { MessageBox(L"没有找到程序,请输入正确的PID"); } else{ SetTimer(1,1000,NULL); MessageBox(L"操作成功,开始监听"); } }
onTimer里的操作
void CchenDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialogEx::OnTimer(nIDEvent); CString localTime; tm=CTime::GetCurrentTime(); int hour = tm.GetHour(); CTime closeTm; //这里设置一下结束时间 closeTm =CTime(tm.GetYear(),tm.GetMonth(),tm.GetDay(),4,0,0,-1); CTimeSpan s; if(hour>4) { //说明要跨越天数 //先获取当天最后一秒的时间 CTime finallyTime =CTime(tm.GetYear(),tm.GetMonth(),tm.GetDay(),23,59,59,-1); CTimeSpan finallySpan = finallyTime-tm; //closeTm = closeTm+finallySpan+hour4; s = finallySpan + CTimeSpan(0,4,0,1);//4小时 } else { s = closeTm-tm; if(s<=0) { //说明时间到了 TerminateProcessFromId(); m_time.SetWindowTextW(L"(0秒)程序已关闭"); KillTimer(1); } } int m_hour= s.GetHours(); int m_min = s.GetMinutes(); int m_s = s.GetSeconds(); CString timeStr; timeStr.Format(_T("%d时%d分%d秒"),m_hour,m_min,m_s); localTime=tm.Format("%Y年%m月%d日 %X"); m_CurrTime.SetWindowTextW(localTime); m_time.SetWindowTextW(timeStr); }