写个定时关机程序自用,界面简单实用,最终界面如下
第一步,新建一个MFC对话框应用程序,拖几个控件过来,
界面如下:
然后给下拉列表框,复选按钮绑定变量,以方便进行操作。
CComboBox m_com_hour;
CComboBox m_com_minute;
CComboBox
m_com_second;
第二步,先实现简单关机功能,不通过文件读写进行关键。在选择过时间后,确定关机后按时关机。
1,给下拉列表框添加更改事件,直接右键控件->选择添加事件处理程序,选择CBN_SELCHANGE
然后编辑代码,添加如下:
1 void CAutoShutDownDlg::OnCbnSelchangeCombo1()//时
2 {
3 // TODO: 在此添加控件通知处理程序代码
4 int sel = 0;
5 sel = m_com_hour.GetCurSel();//这个是获取当前鼠标选择的时间的索引,从零开始的
6 hour = sel;//hour是添加的成员变量,还有minute和second,这就是关机时间
7 }
还有其他的分钟和秒类似这个,这里不多说了,代码如下
1 void CAutoShutDownDlg::OnCbnSelchangeCombo2()//分
2 {
3 // TODO: 在此添加控件通知处理程序代码
4 int sel = 0;
5 sel = m_com_minute.GetCurSel();
6 minute = sel;
7 }
8
9
10 void CAutoShutDownDlg::OnCbnSelchangeCombo3()//秒
11 {
12 // TODO: 在此添加控件通知处理程序代码
13 int sel = 0;
14 sel = m_com_second.GetCurSel();
15 second = sel;
16 }
View
Code
现在可以获取程序中选择的时间了,然后就是获取这些信息,在单击过确定按钮后弹出确认窗口,确认关机时间。
在资源窗口直接双击确认按钮进入按钮按下消息响应程序
1 void CAutoShutDownDlg::OnBnClickedOk()
2 {
3 // TODO: 在此添加控件通知处理程序代码
4 //复选框是否选中,这个处理是否添加开机启动项,后面再说这个
5 UINT ischecked = IsDlgButtonChecked(IDC_CHECK1);
6
7 //获取选择的时间
8 hour = m_com_hour.GetCurSel();
9 minute = m_com_minute.GetCurSel();
10 second = m_com_second.GetCurSel();
11
12 //数据进行格式化处理
13 CString str = "";
14 str.Format("%2d时%2d分%2d秒", hour, minute, second);
15 // GetDlgItem(IDC_STATIC_NOW)->SetWindowText(str);
16 int resoult = MessageBox("确定要在"+str+"关机吗?","是否关机?",MB_OKCANCEL);
17 if (resoult == IDOK)
18 {
19 //是否添加到启动项,这里用来检查是否写入到开机启动项,直接写入注册表,这个后面再说
20 AutoStart(ischecked);
21 //更新程序窗口中显示的关机时间
22 GetDlgItem(IDC_STATIC_SHUT)->SetWindowText(str);
23
24 FILE *file;
25 int err;
26 err = fopen_s(&file, "c:\\ShutDownTime.txt", "w+");
27 if (!err)
28 {
29 err = fprintf_s(file, "%02d%02d%02d",hour, minute, second);
30 if (err == EOF)
31 {
32 MessageBox("请重试!");
33 }
34 }
35 else
36 {
37 MessageBox("文件打开错误");
38 }
39 if (fclose(file) != 0)
40 {
41 MessageBox("文件关闭错误");
42 }
43
44 }
45 }
现在来看看OnInitDialog()函数里做了什么
这里主要用来读取上次保存的关机时间
1 //读取软件设置的默认时间
2 FILE *file;
3 errno_t err;
4 err = fopen_s(&file, "c:\\ShutDownTime.txt", "a+");
5 if (!err)
6 {
7 fscanf_s(file, "%02d%02d%02d",&hour, &minute, &second);
8 }
9 else
10 {
11 MessageBox("文件打开错误");
12 }
13 if (fclose(file) != 0)
14 {
15 MessageBox("文件关闭错误");
16 }
17 str = "";
18 str.Format("%2d时%2d分%2d秒", hour, minute, second);
19 GetDlgItem(IDC_STATIC_SHUT)->SetWindowText(str);
20 SetTimer(0,100,NULL);//定时刷新当前时间
21 SetTimer(1, 1000, NULL);//定时检查是否到达关机时间
这里主要用了两个定时器来检查关机时间。
还有一个默认显示的关机时间,当第一次打开程序时,并没有关机时间,这里默认现在当前的时间,关机时间会在确认关机后更新。
1 GetTime();//获取当前时间,自定义的成员函数
2 CString str = "";
3 str.Format("%2d时%2d分%2d秒", hour, minute, second);
4 GetDlgItem(IDC_STATIC_NOW)->SetWindowText(str);
5
6
7 int temp = 0;
8 int i = 0;
9 //设置默认显示的小时
10 str = "";
11 for (i = 0; i <= 23; i++)
12 {
13 str.Format("%2d时", i);
14 m_com_hour.AddString(str);
15 }
16 m_com_hour.SetCurSel(hour);
17 //设置默认显示的分钟
18 str = "";
19
20 for (i = 0; i <= 59; i++)
21 {
22 str.Format("%2d分", i);
23 m_com_minute.AddString(str);
24 }
25 m_com_minute.SetCurSel(minute);
26 //设置默认显示的妙
27 str = "";
28
29 for (i = 0; i <= 59; i++)
30 {
31 str.Format("%2d秒", i);
32 m_com_second.AddString(str);
33 }
34 m_com_second.SetCurSel(second);
其中GetTime()为自定义的成员函数,用于获取当前时间
1 void CAutoShutDownDlg::GetTime()
2 {
3 CTime time1 = CTime::GetCurrentTime();//获取系统当前时间
4 hour = time1.GetHour();
5 minute = time1.GetMinute();
6 second = time1.GetSecond();
7 }
现在能实现关机了,不过程序没法最小化到任务栏,实在不方便,明天继续研究这个。
时间: 2024-08-08 14:03:15