先来个效果图

关闭进程的方法:

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);
}