在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例桌面应用界面/GUI → c++ 定时关机 项目源码

c++ 定时关机 项目源码

桌面应用界面/GUI

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.31M
  • 下载次数:13
  • 浏览次数:159
  • 发布时间:2020-07-04
  • 实例类别:桌面应用界面/GUI
  • 发 布 人:dipts
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 定时关机 关机 定时

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

// TimedShutdownDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "TimedShutdown.h"
#include "TimedShutdownDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

	// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_ABOUTBOX };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CTimedShutdownDlg 对话框



CTimedShutdownDlg::CTimedShutdownDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(IDD_TIMEDSHUTDOWN_DIALOG, pParent)
	, m_strCurrentTime(_T(""))
	, m_nSelect(0)
	, m_nH(0)
	, m_nHL(0)
	, m_nM(0)
	, m_nML(0)
	, m_nS(0)
	, m_nSL(0)
	, m_strAbsTime(_T(""))
	, m_strRelaTime(_T(""))
	, m_strDisplayPlan(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_CHD);
}

void CTimedShutdownDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_STATIC_CRUUENT_TIME, m_strCurrentTime);
	//  DDX_CBIndex(pDX, IDC_COMBO_HOUR, m_nH);
	DDX_Control(pDX, IDC_COMBO_HOUR, m_ctrH);
	//  DDX_CBIndex(pDX, IDC_COMBO_MINATE, m_nM);
	DDX_Control(pDX, IDC_COMBO_MINATE, m_ctrM);
	//  DDX_CBIndex(pDX, IDC_COMBO_SECOND, m_nS);
	DDX_Control(pDX, IDC_COMBO_SECOND, m_ctrS);
	//  DDX_CBString(pDX, IDC_COMBO_HOURS_LATER, m_strHourLater);
	//  DDX_Control(pDX, IDC_COMBO_HOURS_LATER, m_ctrHourLater);
	//  DDX_Radio(pDX, IDC_RADIO_SHUTDOWN, m_bSelect);
	DDX_Radio(pDX, IDC_RADIO_SHUTDOWN, m_nSelect);
	DDX_Control(pDX, IDC_COMBO_HOURS_LATER, m_ctrHourLater);
	//  DDX_CBIndex(pDX, IDC_COMBO_MINS_LATER2, m_nMinLater);
	//  DDX_CBIndex(pDX, IDC_COMBO_HOURS_LATER, m_nHourLater);
	DDX_Control(pDX, IDC_COMBO_MINS_LATER2, m_ctrMinLater);
	//  DDX_CBIndex(pDX, IDC_COMBO_SECONDS_LATER3, m_nSecLater);
	DDX_Control(pDX, IDC_COMBO_SECONDS_LATER3, m_ctrSecLater);
	DDX_CBIndex(pDX, IDC_COMBO_HOUR, m_nH);
	DDX_CBIndex(pDX, IDC_COMBO_HOURS_LATER, m_nHL);
	DDX_CBIndex(pDX, IDC_COMBO_MINATE, m_nM);
	DDX_CBIndex(pDX, IDC_COMBO_MINS_LATER2, m_nML);
	DDX_CBIndex(pDX, IDC_COMBO_SECOND, m_nS);
	//  DDX_CBString(pDX, IDC_COMBO_SECONDS_LATER3, m_nSL);
	DDX_CBIndex(pDX, IDC_COMBO_SECONDS_LATER3, m_nSL);
	DDX_Text(pDX, IDC_STATIC_ABS_TIME, m_strAbsTime);
	DDX_Text(pDX, IDC_STATIC_RELA_TIME, m_strRelaTime);
	DDX_Text(pDX, IDC_STATIC_CRUUENT_PLAN2, m_strDisplayPlan);
}

BEGIN_MESSAGE_MAP(CTimedShutdownDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_OK, &CTimedShutdownDlg::OnBnClickedButtonOk)
	ON_BN_CLICKED(IDC_RADIO_SHUTDOWN, &CTimedShutdownDlg::OnBnClickedRadioShutdown)
	ON_BN_CLICKED(IDC_RADIO_SLEEP, &CTimedShutdownDlg::OnBnClickedRadioSleep)
	ON_WM_TIMER()
	ON_WM_CTLCOLOR()
	ON_CBN_SELCHANGE(IDC_COMBO_HOUR, &CTimedShutdownDlg::OnCbnSelchangeComboHour)
	ON_WM_DESTROY()
	ON_CBN_SELCHANGE(IDC_COMBO_MINATE, &CTimedShutdownDlg::OnCbnSelchangeComboMinate)
	ON_CBN_SELCHANGE(IDC_COMBO_SECOND, &CTimedShutdownDlg::OnCbnSelchangeComboSecond)
	ON_CBN_SELCHANGE(IDC_COMBO_HOURS_LATER, &CTimedShutdownDlg::OnCbnSelchangeComboHoursLater)
	ON_CBN_SELCHANGE(IDC_COMBO_MINS_LATER2, &CTimedShutdownDlg::OnCbnSelchangeComboMinsLater2)
	ON_CBN_SELCHANGE(IDC_COMBO_SECONDS_LATER3, &CTimedShutdownDlg::OnCbnSelchangeComboSecondsLater3)
	ON_BN_CLICKED(IDC_RADIO_RE_START, &CTimedShutdownDlg::OnBnClickedRadioReStart)
	ON_BN_CLICKED(IDC_BUTTON_CANCEL, &CTimedShutdownDlg::OnBnClickedButtonCancel)
	ON_BN_CLICKED(IDC_BUTTON_EXIT, &CTimedShutdownDlg::OnBnClickedButtonExit)
	ON_WM_CLOSE()
END_MESSAGE_MAP()


// CTimedShutdownDlg 消息处理程序

BOOL CTimedShutdownDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	//ShowWindow(SW_MAXIMIZE);
	//休眠选择不使能
	GetDlgItem(IDC_RADIO_SLEEP)->EnableWindow(FALSE);
	//设置字体大小、字体类型	
	cfont.CreatePointFont(125, _T("宋体"), NULL);
	GetDlgItem(IDC_STATIC_CRUUENT_TIME2)->SetFont(&cfont);
	GetDlgItem(IDC_STATIC_CRUUENT_TIME)->SetFont(&cfont);
	//
	GetDlgItem(IDC_STATIC_CRUUENT_PLAN2)->SetFont(&cfont);
	GetDlgItem(IDC_STATIC_CRUUENT_PLAN)->SetFont(&cfont);
	//

	m_strRelaTime = "相对时间:";
	m_strAbsTime = "绝对时间:";

	// TODO: 在此添加额外的初始化代码
	//定时器设定1s响应一次
	SetTimer(1, 1000, NULL);
	//获取当前时间
	GetLocalTime(&timenow);
	m_strCurrentTime.Format("%4d 年 %2d 月 %2d 日 %2d 时 %2d 分 %2d 秒", timenow.wYear, timenow.wMonth, timenow.wDay, timenow.wHour, timenow.wMinute, timenow.wSecond);
	SetDlgItemText(IDC_STATIC_CRUUENT_TIME, m_strCurrentTime);
	//combo控件初始化
	//小时
	CString str;
	for (int i = 0; i <= 23; i  )
	{
		str.Format("%d", i);
		m_ctrH.InsertString(i, str);
	}
	//分
	for (int i = 0; i <= 59; i  )
	{
		str.Format("%d", i);
		m_ctrM.InsertString(i, str);
	}
	//秒
	for (int i = 0; i <= 59; i  )
	{
		str.Format("%d", i);
		m_ctrS.InsertString(i, str);
	}
	//相对时间(小时)
	for (int i = 0; i <= 23; i  )
	{
		str.Format("%d", i);
		m_ctrHourLater.InsertString(i, str);
	}
	//相对时间(分)
	for (int i = 0; i <= 59; i  )
	{
		str.Format("%d", i);
		m_ctrMinLater.InsertString(i, str);
	}
	//相对时间(秒)
	for (int i = 0; i <= 59; i  )
	{
		str.Format("%d", i);
		m_ctrSecLater.InsertString(i, str);
	}
	
	//颜色修改标识
	m_bColorChange = FALSE;
	
	//是否加一天
	m_nDay = 0;
	//
	m_strDisplayPlan.Format("无!");
	
	//从注册表中读取数据
	//
	//首先判断注册表是否存在
	int ret = (::RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\TimedShutdown", 0, KEY_READ, &hKey));	
	if (ret != ERROR_SUCCESS)
	{
		//若不存在首先创建注册表
		RegCreateKey(HKEY_CURRENT_USER, "Software\\TimedShutdown", &hKey);
		//相关值附初值
		//定时项选择
		m_nSelect = 0;
		//有无任务标识
		m_bHasPlan = FALSE;
		//绝对时间与相对时间控件初始化
		m_nH = 0;
		m_nM = 0;
		m_nS = 0;
		m_nHL = 0;
		m_nML = 0;
		m_nSL = 0;
	
	}
	else
	{	
		/*theApp.WriteProfileInt("TimedShutdownData", "m_bHasPlan", 0);*/
		m_bHasPlan = theApp.GetProfileInt("TimedShutdownData", "m_bHasPlan", 0);
		if (m_bHasPlan == TRUE)
		{
			m_nH = theApp.GetProfileInt("TimedShutdownData", "m_nH", 0);
			m_nM = theApp.GetProfileInt("TimedShutdownData", "m_nM", 0);
			m_nS = theApp.GetProfileInt("TimedShutdownData", "m_nS", 0);
			m_nSelect = theApp.GetProfileInt("TimedShutdownData", "m_nSelect", 0);
			m_ctrH.SetCurSel(m_nH);
			m_ctrM.SetCurSel(m_nM);
			m_ctrS.SetCurSel(m_nS);
			if (m_nSelect == 0)
			{
				((CButton *)GetDlgItem(IDC_RADIO_SHUTDOWN))->SetCheck(TRUE);
			}
			else if (m_nSelect == 1)
			{
				((CButton *)GetDlgItem(IDC_RADIO_SLEEP))->SetCheck(TRUE);
			}
			else if (m_nSelect == 2)
			{
				((CButton *)GetDlgItem(IDC_RADIO_RE_START))->SetCheck(TRUE);
			}
			AlreadyTask();
		}
		else if (m_bHasPlan == FALSE)
		{
			//相关值附初值
			//定时项选择
			m_nSelect = 0;
			//有无任务标识
			//m_bHasPlan = FALSE;
			//绝对时间与相对时间控件初始化
			m_nH = 0;
			m_nM = 0;
			m_nS = 0;
			m_nHL = 0;
			m_nML = 0;
			m_nSL = 0;
		}	
	}

	UpdateData(FALSE);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CTimedShutdownDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CTimedShutdownDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon   1) / 2;
		int y = (rect.Height() - cyIcon   1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		//CRect rc;
		//GetWindowRect(&rc);
		//CImage mImage;
		//if (mImage.Load(_T("Q:\\Z_dipts\\钥匙.jpg")) == S_OK)
		//{
		//	//这里让图片绘制区域和窗口大小一致  
		//	mImage.Draw(GetDC()->GetSafeHdc(), CRect(0, 0, rc.Width(), rc.Height()));
		//}
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CTimedShutdownDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}






void CTimedShutdownDlg::OnBnClickedRadioShutdown()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);

}


void CTimedShutdownDlg::OnBnClickedRadioSleep()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
}


void CTimedShutdownDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值	
	GetLocalTime(&timenow);
	m_strCurrentTime.Format("%4d 年 %2d 月 %2d 日 %2d 时 %2d 分 %2d 秒", timenow.wYear, timenow.wMonth, timenow.wDay, timenow.wHour, timenow.wMinute, timenow.wSecond);
	switch (nIDEvent)
	{
	case 1:
		SetDlgItemText(IDC_STATIC_CRUUENT_TIME, m_strCurrentTime);
		break;
	case 2:
		OnCbnSelchangeComboHour();
		break;
	}
	CDialogEx::OnTimer(nIDEvent);
}



HBRUSH CTimedShutdownDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

	// TODO:  在此更改 DC 的任何特性
	if (nCtlColor == CTLCOLOR_STATIC && (pWnd->GetDlgCtrlID() == IDC_STATIC_CRUUENT_TIME2 | pWnd->GetDlgCtrlID() == IDC_STATIC_CRUUENT_TIME))  //静态文本颜色,并且指定控件ID号       
	{
		pDC->SetTextColor(RGB(0, 255, 0)); //字体颜色
	}
	if (nCtlColor == CTLCOLOR_STATIC && (pWnd->GetDlgCtrlID() == IDC_STATIC_CRUUENT_PLAN2 | pWnd->GetDlgCtrlID() == IDC_STATIC_CRUUENT_PLAN))  //静态文本颜色,并且指定控件ID号       
	{
		pDC->SetTextColor(RGB(255, 0, 0)); //字体颜色
	}
	if (nCtlColor == 6 && (pWnd->GetDlgCtrlID() == IDC_STATIC_RELA_TIME | pWnd->GetDlgCtrlID() == IDC_STATIC_HOURS_LATER | pWnd->GetDlgCtrlID() == IDC_STATIC_MINS_LATER2 | pWnd->GetDlgCtrlID() == IDC_STATIC_SECONDS_LATER3))  //静态文本颜色,并且指定控件ID号       
	{
		pDC->SetTextColor(RGB(255, 0, 0)); //字体颜色
	}

	if (nCtlColor == 6 && (pWnd->GetDlgCtrlID() == IDC_STATIC_ABS_TIME | pWnd->GetDlgCtrlID() == IDC_STATIC_S | pWnd->GetDlgCtrlID() == IDC_STATIC_M | pWnd->GetDlgCtrlID() == IDC_STATIC_H))  //静态文本颜色,并且指定控件ID号       
	{
		pDC->SetTextColor(RGB(0, 0, 255)); //字体颜色
	}
	//pDC->SetBkMode(TRANSPARENT);
	//if (nCtlColor == 5 && (pWnd->GetDlgCtrlID() == IDC_COMBO_HOURS_LATER | pWnd->GetDlgCtrlID() == IDC_COMBO_MINS_LATER2 | pWnd->GetDlgCtrlID() == IDC_COMBO_SECONDS_LATER3))  //静态文本颜色,并且指定控件ID号       
	//{
	//	pDC->SetTextColor(RGB(255, 0, 0)); //字体颜色
	//}
	//if (m_bColorChange == FALSE && (pWnd->GetDlgCtrlID() == IDC_STATIC_RELA_TIME ))  //静态文本颜色,并且指定控件ID号       
	//{  
	//	pDC->SetTextColor(RGB(0, 0, 0)); //字体颜色| pWnd->GetDlgCtrlID() == IDC_COMBO_HOURS_LATER | pWnd->GetDlgCtrlID() == IDC_COMBO_MINS_LATER2 | pWnd->GetDlgCtrlID() == IDC_COMBO_SECONDS_LATER3
	//}


	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
	return hbr;
}


void CTimedShutdownDlg::OnCbnSelchangeComboHour()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	////获取小时数
	////行索引下数据值
	//iPose = m_ctrH.GetCurSel();
	//m_ctrH.GetLBText(iPose, str);
	////转换为整数
	//nH = atoi(str);
	////获取分数
	////行索引下数据值
	//iPose = m_ctrM.GetCurSel();
	//m_ctrM.GetLBText(iPose, str);
	////转换为整数
	//nM = atoi(str);
	////获取秒数
	////行索引下数据值
	//iPose = m_ctrS.GetCurSel();
	//m_ctrS.GetLBText(iPose, str);
	////转换为整数
	//nS = atoi(str);
	//计算时间
	//当前时间总秒数
	nNowSecond = timenow.wHour * 3600   timenow.wMinute * 60   timenow.wSecond;
	//绝对时间总秒数
	nAbsoluteSecond = m_nH * 3600   m_nM * 60   m_nS;
	//相对时间总秒数
	if ((nAbsoluteSecond - nNowSecond) < 0)
	{
		nRelativeSecond = nAbsoluteSecond - nNowSecond   24 * 3600;
		m_nDay = 1;
	}
	else
	{
		nRelativeSecond = nAbsoluteSecond - nNowSecond;
		m_nDay = 0;
	}

	//计算相对时间控件中的值
	m_nHL = nRelativeSecond / 3600;
	m_nML = (nRelativeSecond - m_nHL * 3600) / 60;
	m_nSL = nRelativeSecond - m_nHL * 3600 - m_nML * 60;

	//
	UpdateData(FALSE);
}


void CTimedShutdownDlg::OnDestroy()
{
	CDialogEx::OnDestroy();

	// TODO: 在此处添加消息处理程序代码
	KillTimer(1);
	KillTimer(2);
	/*m_bHasPlan = FALSE;
	m_nH = 0;
	m_nM = 0;
	m_nS = 0;
	m_nHL = 0;
	m_nML = 0;
	m_nSL = 0;
	m_nDay = 0;*/
	RegCloseKey(hKey);
}


void CTimedShutdownDlg::OnCbnSelchangeComboMinate()
{
	// TODO: 在此添加控件通知处理程序代码
	OnCbnSelchangeComboHour();
}


void CTimedShutdownDlg::OnCbnSelchangeComboSecond()
{
	// TODO: 在此添加控件通知处理程序代码
	OnCbnSelchangeComboHour();
}


void CTimedShutdownDlg::OnCbnSelchangeComboHoursLater()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	////获取小时数
	////行索引下数据值
	//iPose = m_ctrHourLater.GetCurSel();
	//m_ctrHourLater.GetLBText(iPose, str);
	////转换为整数
	//nHL = atoi(str);
	////获取分数
	////行索引下数据值
	//iPose = m_ctrMinLater.GetCurSel();
	//m_ctrMinLater.GetLBText(iPose, str);
	////转换为整数
	//nML = atoi(str);
	////获取秒数
	////行索引下数据值
	//iPose = m_ctrSecLater.GetCurSel();
	//m_ctrSecLater.GetLBText(iPose, str);
	////转换为整数
	//nSL = atoi(str);
	//计算时间
	//当前时间总秒数
	nNowSecond = timenow.wHour * 3600   timenow.wMinute * 60   timenow.wSecond;

	//相对时间总秒数
	nRelativeSecond = m_nHL * 3600   m_nML * 60   m_nSL;
	//绝对时间总秒数
	nAbsoluteSecond = nNowSecond   nRelativeSecond;
	//计算绝对时间控件中的值

	m_nH = nAbsoluteSecond / 3600;
	m_nM = (nAbsoluteSecond - m_nH * 3600) / 60;
	m_nS = nAbsoluteSecond - m_nH * 3600 - m_nM * 60;
	m_nH = m_nH - m_nH / 24 * 24;

	//
	UpdateData(FALSE);
}


void CTimedShutdownDlg::OnCbnSelchangeComboMinsLater2()
{
	// TODO: 在此添加控件通知处理程序代码
	OnCbnSelchangeComboHoursLater();
}


void CTimedShutdownDlg::OnCbnSelchangeComboSecondsLater3()
{
	// TODO: 在此添加控件通知处理程序代码
	OnCbnSelchangeComboHoursLater();
}



void CTimedShutdownDlg::OnBnClickedRadioReStart()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
}

void CTimedShutdownDlg::OnBnClickedButtonOk()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_bHasPlan == TRUE)
	{
		AfxMessageBox("当前已有计划任务!", MB_ICONSTOP);
		return;
	}

	//OnCbnSelchangeComboHoursLater();
	OnCbnSelchangeComboHour();
	//
	//CString shutTime, ShutdownTime;

	if (m_nSelect == 0)
	{
		m_strShutTime.Format("系统将于 %d 时 %d 分 %d 秒 关机!", m_nH, m_nM, m_nS);
		//AfxMessageBox(shutTime);
		m_strShutdownTime.Format("shutdown -s -t %d", nRelativeSecond);
		//system(ShutdownTime);
		m_strAbsTime = "关机时间:";
	}
	else if (m_nSelect == 1)
	{
		m_strShutTime.Format("系统将于 %d 时 %d 分 %d 秒 休眠!", m_nH, m_nM, m_nS);
		//AfxMessageBox(shutTime);
		m_strShutdownTime.Format("shutdown.exe -h -t %d", nRelativeSecond);
		//system(ShutdownTime);
		m_strAbsTime = "休眠时间:";
	}
	else if (m_nSelect == 2)
	{
		m_strShutTime.Format("系统将于 %d 时 %d 分 %d 秒 重启!", m_nH, m_nM, m_nS);
		//AfxMessageBox(shutTime);
		m_strShutdownTime.Format("shutdown -r -t %d", nRelativeSecond);
		//system(ShutdownTime);
		m_strAbsTime = "重启时间:";
	}
	//
	if (IDOK == AfxMessageBox(_T(m_strShutTime), MB_OKCANCEL | MB_ICONINFORMATION))
	{
		system(m_strShutdownTime);
		m_strRelaTime = " 倒计时: ";
		//禁止更改窗口
		m_ctrHourLater.EnableWindow(FALSE);
		m_ctrMinLater.EnableWindow(FALSE);
		m_ctrSecLater.EnableWindow(FALSE);
		m_ctrH.EnableWindow(FALSE);
		m_ctrM.EnableWindow(FALSE);
		m_ctrS.EnableWindow(FALSE);
		GetDlgItem(IDC_RADIO_SHUTDOWN)->EnableWindow(FALSE);
		GetDlgItem(IDC_RADIO_SLEEP)->EnableWindow(FALSE);
		GetDlgItem(IDC_RADIO_RE_START)->EnableWindow(FALSE);
		//定时器
		SetTimer(2, 1000, NULL);

		//颜色修改标识  
		//m_bColorChange = TRUE;
		//是否有计划标识
		m_bHasPlan = TRUE;
		//strcpy(m_strDisplayPlan, m_strShutTime   4);m_strDisplayPlan 
		CString strDisPlan;
		strDisPlan = m_strShutTime.Mid(8, m_strShutTime.GetLength());
		int nYear, nMonth, nDay;
		if (m_nDay==1)
		{
			nYear = timenow.wYear;
			nMonth = timenow.wMonth;
			nDay = timenow.wDay  m_nDay;
			if ((timenow.wMonth == 1 | timenow.wMonth == 3 | timenow.wMonth == 5 | timenow.wMonth == 7 | timenow.wMonth == 8 | timenow.wMonth == 10) && timenow.wDay == 31)
			{
				/*nYear = timenow.wYear;*/
				nMonth = timenow.wMonth  1;
				nDay = 1;
			}
			else if ((timenow.wMonth == 12) && timenow.wDay == 31)
			{
				nYear = timenow.wYear 1;
				nMonth = 1;
				nDay = 1;
			}
			else if ((timenow.wMonth == 4 | timenow.wMonth == 6 | timenow.wMonth == 9 | timenow.wMonth == 11 ) && timenow.wDay == 30)
			{
				nMonth = timenow.wMonth   1;
				nDay = 1;
			}
			else if (timenow.wMonth == 2 &&((timenow.wDay == 28 && FALSE==IsLeapYear(timenow.wYear))|(timenow.wDay == 29 && TRUE == IsLeapYear(timenow.wYear))))
			{
				nMonth = timenow.wMonth   1;
				nDay = 1;
			}
		}
		else
		{
			nYear = timenow.wYear;
			nMonth = timenow.wMonth;
			nDay = timenow.wDay;
		}
		m_strDisplayPlan.Format("%4d 年 %2d 月 %2d 日", nYear, nMonth, nDay);
		m_strDisplayPlan  = strDisPlan;
	}
	else
	{
		m_bHasPlan = FALSE;
		return;
	}
	UpdateData(FALSE);
}

void CTimedShutdownDlg::OnBnClickedButtonCancel()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_bHasPlan == FALSE)
	{
		AfxMessageBox("无计划任务,请先设置定时任务!", MB_ICONINFORMATION);
		return;
	}
	CString m_strShutTimeCancel, m_strShutdownTimeCancel;
	m_strShutdownTimeCancel.Format("shutdown -a");
	m_strShutTimeCancel = m_strShutTime   " 确定取消计划吗?";
	//
	if (IDYES == AfxMessageBox(_T(m_strShutTimeCancel), MB_YESNO | MB_ICONQUESTION))
	{
		//取消计划
		system(m_strShutdownTimeCancel);
		//取消倒计时
		KillTimer(2);
		//可以更改窗口	
		m_ctrHourLater.EnableWindow(TRUE);
		m_ctrMinLater.EnableWindow(TRUE);
		m_ctrSecLater.EnableWindow(TRUE);
		m_ctrH.EnableWindow(TRUE);
		m_ctrM.EnableWindow(TRUE);
		m_ctrS.EnableWindow(TRUE);
		GetDlgItem(IDC_RADIO_SHUTDOWN)->EnableWindow(TRUE);
		//GetDlgItem(IDC_RADIO_SLEEP)->EnableWindow(TRUE);
		GetDlgItem(IDC_RADIO_RE_START)->EnableWindow(TRUE);

		//计划取消标识
		m_bHasPlan = FALSE;
		//m_bColorChange == FALSE;
		//更新变量值(通过绝对时间)
		//OnCbnSelchangeComboHour();

		m_strRelaTime = "相对时间:";
		m_strAbsTime = "绝对时间:";
		m_strDisplayPlan.Format("无!");
	}
	else
	{
		return;
	}

	UpdateData(FALSE);
}


void CTimedShutdownDlg::OnBnClickedButtonExit()
{
	// TODO: 在此添加控件通知处理程序代码\n
	CString strExitMessage;
	//是否取消在任意情况下均需保存
	/*theApp.WriteProfileInt("TimedShutdownData", "m_bHasPlan", m_bHasPlan);*/
	if (m_bHasPlan == FALSE)
	{
		strExitMessage.Format("当前无计划任务!");
		//数据保存
		theApp.WriteProfileInt("TimedShutdownData", "m_bHasPlan", m_bHasPlan);
		theApp.WriteProfileInt("TimedShutdownData", "m_nH", 0);
		theApp.WriteProfileInt("TimedShutdownData", "m_nM", 0);
		theApp.WriteProfileInt("TimedShutdownData", "m_nS", 0);
		theApp.WriteProfileInt("TimedShutdownData", "m_nSelect", 0);
	}
	else if (m_bHasPlan == TRUE)
	{
		strExitMessage = m_strShutTime;
		//数据保存
		theApp.WriteProfileInt("TimedShutdownData", "m_bHasPlan", m_bHasPlan);
		theApp.WriteProfileInt("TimedShutdownData", "m_nH", m_nH);
		theApp.WriteProfileInt("TimedShutdownData", "m_nM", m_nM);
		theApp.WriteProfileInt("TimedShutdownData", "m_nS", m_nS);
		theApp.WriteProfileInt("TimedShutdownData", "m_nSelect", m_nSelect);
	}
	//AfxMessageBox(strExitMessage);
	strExitMessage  = "\n确定要退出(退出不会改变当前计划)吗?";
	if (IDYES == AfxMessageBox(_T(strExitMessage), MB_YESNO | MB_ICONQUESTION))
	{
		CDialog::OnOK();
	}
	else
	{
		return;
	}

}


void CTimedShutdownDlg::OnClose()
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	OnBnClickedButtonExit();
	//CDialog::OnOK();
	//CDialogEx::OnClose();
}


void CTimedShutdownDlg::AlreadyTask()
{
	// TODO: 在此添加控件通知处理程序代码
	//if (m_bHasPlan == TRUE)
	//{
		AfxMessageBox("当前已有计划任务!", MB_ICONSTOP);
	//	return;
	//}

	//OnCbnSelchangeComboHoursLater();
	OnCbnSelchangeComboHour();
	//
	//CString shutTime, ShutdownTime;

	if (m_nSelect == 0)
	{
		m_strShutTime.Format("系统将于 %d 时 %d 分 %d 秒 关机!", m_nH, m_nM, m_nS);
		//AfxMessageBox(shutTime);
		m_strShutdownTime.Format("shutdown -s -t %d", nRelativeSecond);
		//system(ShutdownTime);
		m_strAbsTime = "关机时间:";
	}
	else if (m_nSelect == 1)
	{
		m_strShutTime.Format("系统将于 %d 时 %d 分 %d 秒 休眠!", m_nH, m_nM, m_nS);
		//AfxMessageBox(shutTime);
		m_strShutdownTime.Format("shutdown.exe -h -t %d", nRelativeSecond);
		//system(ShutdownTime);
		m_strAbsTime = "休眠时间:";
	}
	else if (m_nSelect == 2)
	{
		m_strShutTime.Format("系统将于 %d 时 %d 分 %d 秒 重启!", m_nH, m_nM, m_nS);
		//AfxMessageBox(shutTime);
		m_strShutdownTime.Format("shutdown -r -t %d", nRelativeSecond);
		//system(ShutdownTime);
		m_strAbsTime = "重启时间:";
	}
	//
	/*if (IDOK == AfxMessageBox(_T(m_strShutTime), MB_OKCANCEL | MB_ICONINFORMATION))
	{*/
		system(m_strShutdownTime);
		m_strRelaTime = " 倒计时: ";
		//禁止更改窗口
		m_ctrHourLater.EnableWindow(FALSE);
		m_ctrMinLater.EnableWindow(FALSE);
		m_ctrSecLater.EnableWindow(FALSE);
		m_ctrH.EnableWindow(FALSE);
		m_ctrM.EnableWindow(FALSE);
		m_ctrS.EnableWindow(FALSE);
		GetDlgItem(IDC_RADIO_SHUTDOWN)->EnableWindow(FALSE);
		GetDlgItem(IDC_RADIO_SLEEP)->EnableWindow(FALSE);
		GetDlgItem(IDC_RADIO_RE_START)->EnableWindow(FALSE);
		//定时器
		SetTimer(2, 1000, NULL);

		//颜色修改标识  
		//m_bColorChange = TRUE;
		//是否有计划标识
		/*m_bHasPlan = TRUE;*/
		//strcpy(m_strDisplayPlan, m_strShutTime   4);m_strDisplayPlan 
		CString strDisPlan;
		strDisPlan = m_strShutTime.Mid(8, m_strShutTime.GetLength());
		m_strDisplayPlan.Format("%4d 年 %2d 月 %2d 日", timenow.wYear, timenow.wMonth, timenow.wDay   m_nDay);
		m_strDisplayPlan  = strDisPlan;
	//}
	//else
	//{
	//	m_bHasPlan = FALSE;
	//	return;
	//}
	/*UpdateData(FALSE);*/
}

//判断闰年
BOOL CTimedShutdownDlg::IsLeapYear(int year)
{
	if (year % 400 == 0 || ((year % 100 != 0) && (year % 4 == 0)))
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

实例下载地址

c++ 定时关机 项目源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警