标签:style class blog code http tar
最近在网上看到了一个智能关机系统,看起来感觉功能不错,就想自己写一个,说干就干,使用如鹏网的VC6.0开发向导可以很轻松的搭建好一个界面
我的界面如下
程序模块:
控件名和控件的ID(由于表格的限制只给出了部分的控件名和控件的ID其它的请参考代码)
控件名 |
控件ID |
当前日期(static控件) |
IDC_STATIC |
年(static控件) |
IDC_STATIC |
月(static控件) |
IDC_STATIC |
日(static控件) |
IDC_STATIC |
星期(static控件) |
IDC_STATIC |
年(edit控件) |
IDC_EDIT3 |
月(edit控件) |
IDC_EDIT4 |
日(edit控件) |
IDC_EDIT5 |
星期(edit控件) |
IDC_EDIT9 |
当前时间(static控件) |
IDC_STATIC |
时(static控件) |
IDC_STATIC |
分(static控件) |
IDC_STATIC |
秒(static控件) |
IDC_STATIC |
时(edit控件) |
IDC_EDIT6 |
分(edit控件) |
IDC_EDIT7 |
秒(edit控件) |
IDC_EDIT8 |
预设时间(static控件) |
IDC_STATIC |
年(edit控件) |
IDC_EDIT10 |
月(edit控件) |
IDC_EDIT11 |
日(edit控件) |
IDC_EDIT12 |
时(edit控件) |
IDC_EDIT13 |
函数模块:
函数名 |
函数功能 |
is_strcmp |
判断星期 |
TimerProc |
时间回调函数(显示时间) |
TimerProc1 |
回调函数(用于定时关机) |
TimerProc2 |
回调函数(用于定时重启) |
TimerProc3 |
定时关闭显示器 |
程序代码:
#include "stdafx.h" #include <windows.h> #include <windowsx.h> #include "resource.h" #include "MainDlg.h" BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } /*定义一个函数,用于判断当前的星期*/ void is_strcmp(HWND hwnd,TCHAR*str) { if(0 == lstrcmp(str ,"1")) { SetDlgItemText(hwnd,IDC_EDIT9,"一"); } if(0 == lstrcmp(str,"2")) { SetDlgItemText(hwnd,IDC_EDIT9,"二"); } if(0 == lstrcmp(str,"3")) { SetDlgItemText(hwnd,IDC_EDIT9,"三"); } if(0 == lstrcmp(str,"4")) { SetDlgItemText(hwnd,IDC_EDIT9,"四"); } if(0 == lstrcmp(str,"5")) { SetDlgItemText(hwnd,IDC_EDIT9,"五"); } if(0 == lstrcmp(str,"6")) { SetDlgItemText(hwnd,IDC_EDIT9,"六"); } if(0 == lstrcmp(str,"0")) { SetDlgItemText(hwnd,IDC_EDIT9,"日"); } } /*定时器;显示时间*/ void CALLBACK TimerProc(HWND hwnd, UINT message,UINT iTimerID, DWORD dwTime) { TCHAR strYear[256]; /*用于保存当前时间:年*/ TCHAR strMonth[256]; /*用于保存当前时间:月*/ TCHAR strDay[256]; /*用于保存当前时间:日*/ TCHAR strHour[256]; /*用于保存当前时间:时*/ TCHAR strMinute[256];/*用于保存当前时间:分*/ TCHAR strScond[256]; /*用于保存当前时间:秒*/ TCHAR strWeek[256];/*用于保存当前时间:星期*/ SYSTEMTIME stLock; /*时间结构*/ GetLocalTime(&stLock);/*得到系统时间*/ wsprintf(strYear, "%d", stLock.wYear );/*年*/ SetDlgItemText(hwnd, IDC_EDIT3, strYear );/*年*/ SetDlgItemText(hwnd, IDC_EDIT10, strYear );/*在预设时间中显示当前时间*/ wsprintf(strMonth, "%d", stLock.wMonth );/*月*/ SetDlgItemText(hwnd, IDC_EDIT4, strMonth );/*月*/ SetDlgItemText(hwnd, IDC_EDIT11, strMonth );/*在预设时间中显示当前时间*/ wsprintf(strDay, "%d", stLock.wDay ); /*日*/ SetDlgItemText(hwnd, IDC_EDIT5, strDay );/*日*/ SetDlgItemText(hwnd, IDC_EDIT12, strDay );/*在预设时间中显示当前时间*/ wsprintf(strHour, "%d", stLock.wHour );/*时*/ SetDlgItemText(hwnd, IDC_EDIT6, strHour );/*时*/ wsprintf(strMinute, "%d", stLock.wMinute );/*分*/ SetDlgItemText(hwnd, IDC_EDIT7, strMinute );/*分*/ wsprintf(strScond, "%d", stLock.wSecond); /*秒*/ SetDlgItemText(hwnd, IDC_EDIT8, strScond );/*秒*/ wsprintf(strWeek, "%d", stLock.wDayOfWeek);/*星期*/ is_strcmp(hwnd,strWeek);/*调用is_strcmp函数修改星期*/ } /*回掉函数:定时关机*/ void CALLBACK TimerProc1(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) { KillTimer(hwnd,2); KillTimer(hwnd,3); TCHAR strHour[256]; /*用于保存当前时间:时*/ TCHAR strMinute[256];/*用于保存当前时间:分*/ TCHAR strScond[256]; /*用于保存当前时间:秒*/ SYSTEMTIME stLock; /*时间结构*/ GetLocalTime(&stLock);/*得到系统时间*/ wsprintf(strHour, "%d", stLock.wHour );/*时*/ SetDlgItemText(hwnd, IDC_EDIT6, strHour );/*时*/ wsprintf(strMinute, "%d", stLock.wMinute );/*分*/ SetDlgItemText(hwnd, IDC_EDIT7, strMinute );/*分*/ wsprintf(strScond, "%d", stLock.wSecond); /*秒*/ SetDlgItemText(hwnd, IDC_EDIT8, strScond );/*秒*/ TCHAR Hour[256]; /*保存用户定义的关机时间:时*/ TCHAR Minute[256];/*保存用户定义的关机时间:分*/ TCHAR Second[256];/*保存用户定义的关机时间:秒*/ GetDlgItemText(hwnd,IDC_EDIT13,Hour,sizeof(Hour));/*时*/ GetDlgItemText(hwnd,IDC_EDIT14,Minute,sizeof(Minute));/*分*/ GetDlgItemText(hwnd,IDC_EDIT15,Second,sizeof(Second));/*秒*/ if(0 == lstrcmp(strHour,Hour)) { if(0 == lstrcmp(strMinute,Minute)) { if(0 == lstrcmp(strScond,Second)) { /*Dos命令中的关机命令*/ system("shutdown -s -t 0"); } } } int total1;/*系统时间总和*/ int total2;/*预设时间总和*/ int total3;/*剩余时间总和*/ total1 = stLock.wHour * 3600 + stLock.wMinute * 60 + stLock.wSecond;/*系统时间的总和(秒)*/ total2 = atoi(Hour) * 3600 + atoi(Minute) * 60 + atoi(Second);/*预设时间总和(秒)*/ total3 = total2 - total1;/*剩余时间总和(秒)*/ int HOUR;/*时*/ int MINUTE;/*分*/ int SECOND;/*秒*/ HOUR = total3 / 3600;/*剩余时间(时)*/ MINUTE = (total3 % 3600) / 60;/*剩余时间(分)*/ SECOND = (total3 % 3600) % 60;/*剩余时间(秒)*/ TCHAR hour[256];/*存放剩余时间:时*/ TCHAR minute[256];/*存放剩余时间:分*/ TCHAR second[256];/*存放剩余时间:秒*/ wsprintf(hour, "%d", HOUR); wsprintf(minute, "%d", MINUTE); wsprintf(second, "%d", SECOND); SetDlgItemText(hwnd,IDC_EDIT16,hour);/*显示剩余时间:(时)*/ SetDlgItemText(hwnd,IDC_EDIT17,minute);/*显示剩余时间:(分)*/ SetDlgItemText(hwnd,IDC_EDIT18,second);/*显示剩余时间;(秒)*/ } /*回掉函数:定时重新启动*/ void CALLBACK TimerProc2(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) { KillTimer(hwnd,1); KillTimer(hwnd,3); TCHAR strHour[256]; /*用于保存当前时间:时*/ TCHAR strMinute[256];/*用于保存当前时间:分*/ TCHAR strScond[256]; /*用于保存当前时间:秒*/ SYSTEMTIME stLock; /*时间结构*/ GetLocalTime(&stLock);/*得到系统时间*/ wsprintf(strHour, "%d", stLock.wHour );/*时*/ SetDlgItemText(hwnd, IDC_EDIT6, strHour );/*时*/ wsprintf(strMinute, "%d", stLock.wMinute );/*分*/ SetDlgItemText(hwnd, IDC_EDIT7, strMinute );/*分*/ wsprintf(strScond, "%d", stLock.wSecond); /*秒*/ SetDlgItemText(hwnd, IDC_EDIT8, strScond );/*秒*/ TCHAR Hour[256]; /*保存用户定义的关机时间:时*/ TCHAR Minute[256];/*保存用户定义的关机时间:分*/ TCHAR Second[256];/*保存用户定义的关机时间:秒*/ GetDlgItemText(hwnd,IDC_EDIT13,Hour,sizeof(Hour));/*时*/ GetDlgItemText(hwnd,IDC_EDIT14,Minute,sizeof(Minute));/*分*/ GetDlgItemText(hwnd,IDC_EDIT15,Second,sizeof(Second));/*秒*/ if(0 == lstrcmp(strHour,Hour)) { if(0 == lstrcmp(strMinute,Minute)) { if(0 == lstrcmp(strScond,Second)) { /*Dos命令中的关机命令*/ system("shutdown -r -t 0"); } } } int total1;/*系统时间总和*/ int total2;/*预设时间总和*/ int total3;/*剩余时间总和*/ total1 = stLock.wHour * 3600 + stLock.wMinute * 60 + stLock.wSecond;/*系统时间的总和(秒)*/ total2 = atoi(Hour) * 3600 + atoi(Minute) * 60 + atoi(Second);/*预设时间总和(秒)*/ total3 = total2 - total1;/*剩余时间总和(秒)*/ int HOUR;/*时*/ int MINUTE;/*分*/ int SECOND;/*秒*/ HOUR = total3 / 3600;/*剩余时间(时)*/ MINUTE = (total3 % 3600) / 60;/*剩余时间(分)*/ SECOND = (total3 % 3600) % 60;/*剩余时间(秒)*/ TCHAR hour[256];/*存放剩余时间:时*/ TCHAR minute[256];/*存放剩余时间:分*/ TCHAR second[256];/*存放剩余时间:秒*/ wsprintf(hour, "%d", HOUR); wsprintf(minute, "%d", MINUTE); wsprintf(second, "%d", SECOND); SetDlgItemText(hwnd,IDC_EDIT16,hour);/*显示剩余时间:(时)*/ SetDlgItemText(hwnd,IDC_EDIT17,minute);/*显示剩余时间:(分)*/ SetDlgItemText(hwnd,IDC_EDIT18,second);/*显示剩余时间;(秒)*/ } /*回掉函数:定时关闭显示器*/ void CALLBACK TimerProc3(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) { KillTimer(hwnd,1); KillTimer(hwnd,2); TCHAR strHour[256]; /*用于保存当前时间:时*/ TCHAR strMinute[256];/*用于保存当前时间:分*/ TCHAR strScond[256]; /*用于保存当前时间:秒*/ SYSTEMTIME stLock; /*时间结构*/ GetLocalTime(&stLock);/*得到系统时间*/ wsprintf(strHour, "%d", stLock.wHour );/*时*/ SetDlgItemText(hwnd, IDC_EDIT6, strHour );/*时*/ wsprintf(strMinute, "%d", stLock.wMinute );/*分*/ SetDlgItemText(hwnd, IDC_EDIT7, strMinute );/*分*/ wsprintf(strScond, "%d", stLock.wSecond); /*秒*/ SetDlgItemText(hwnd, IDC_EDIT8, strScond );/*秒*/ TCHAR Hour[256]; /*保存用户定义的关机时间:时*/ TCHAR Minute[256];/*保存用户定义的关机时间:分*/ TCHAR Second[256];/*保存用户定义的关机时间:秒*/ GetDlgItemText(hwnd,IDC_EDIT13,Hour,sizeof(Hour));/*时*/ GetDlgItemText(hwnd,IDC_EDIT14,Minute,sizeof(Minute));/*分*/ GetDlgItemText(hwnd,IDC_EDIT15,Second,sizeof(Second));/*秒*/ if(0 == lstrcmp(strHour,Hour)) { if(0 == lstrcmp(strMinute,Minute)) { if(0 == lstrcmp(strScond,Second)) { /*关闭显示器*/ SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM)2); } } } int total1;/*系统时间总和*/ int total2;/*预设时间总和*/ int total3;/*剩余时间总和*/ total1 = stLock.wHour * 3600 + stLock.wMinute * 60 + stLock.wSecond;/*系统时间的总和(秒)*/ total2 = atoi(Hour) * 3600 + atoi(Minute) * 60 + atoi(Second);/*预设时间总和(秒)*/ total3 = total2 - total1;/*剩余时间总和(秒)*/ int HOUR;/*时*/ int MINUTE;/*分*/ int SECOND;/*秒*/ HOUR = total3 / 3600;/*剩余时间(时)*/ MINUTE = (total3 % 3600) / 60;/*剩余时间(分)*/ SECOND = (total3 % 3600) % 60;/*剩余时间(秒)*/ TCHAR hour[256];/*存放剩余时间:时*/ TCHAR minute[256];/*存放剩余时间:分*/ TCHAR second[256];/*存放剩余时间:秒*/ wsprintf(hour, "%d", HOUR); wsprintf(minute, "%d", MINUTE); wsprintf(second, "%d", SECOND); SetDlgItemText(hwnd,IDC_EDIT16,hour);/*显示剩余时间:(时)*/ SetDlgItemText(hwnd,IDC_EDIT17,minute);/*显示剩余时间:(分)*/ SetDlgItemText(hwnd,IDC_EDIT18,second);/*显示剩余时间;(秒)*/ } /*程序初始化*/ BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { /*调用计时器,1秒钟调用一次TimerProc函数*/ SetTimer(hwnd,0,1000,TimerProc);/*用于显示时间*/ return TRUE; } void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { HWND hwndCheck1 = GetDlgItem(hwnd,IDC_CHECK); HWND hwndCheck2 = GetDlgItem(hwnd, IDC_CHECKRESET); HWND hwndCheck3 = GetDlgItem(hwnd,IDC_CHECKCLOSE); switch(id) { case IDC_CHECK:/*关机*/ { /*定时关机*/ SetTimer(hwnd,0,1000,TimerProc1); } break; case IDC_CHECKRESET:/*重新启动*/ { SetTimer(hwnd,0,1000,TimerProc2); } break; case IDC_CHECKCLOSE:/*关闭显示器*/ { SetTimer(hwnd,0,1000,TimerProc3); } break; case IDC_START: { int index1 = Button_GetCheck(hwndCheck1); int index2 = Button_GetCheck(hwndCheck2); int index3 = Button_GetCheck(hwndCheck3); if(BST_CHECKED == index1) { /*回掉函数:定时关机*/ MessageBox(hwnd,TEXT("计算机将关闭"),TEXT("提示"),MB_OK); } if(BST_CHECKED == index2) { /*回掉函数:定时重新启动*/ MessageBox(hwnd,TEXT("计算机将重新启动"),TEXT("提示"),MB_OK); } if(BST_CHECKED == index3) { /*回掉函数:定时关闭显示器*/ MessageBox(hwnd,TEXT("显示器将关闭"),TEXT("提示"),MB_OK); } } break; case IDC_CANCEL: { MessageBox(hwnd,TEXT("取消计时"),TEXT("提示"),MB_OK); exit(-1); } break; case IDC_CLOSE:/*关机*/ { /*Dos命令中的关机命令*/ system("shutdown -s -t 0"); } break; case IDC_RESET:/*重新启动*/ { /*Dos命令中的重新启动命令*/ system("shutdown -r -t 0"); } break; case IDC_CLOSE1:/*关闭显示器*/ { /*关闭显示器*/ SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM)2); } break; default: break; } } void Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); }
程序执行结果:
设置2014年6月21日20:45:0关机
程序还可以关闭显示器 、重新启动、在此我不再一一演示
标签:style class blog code http tar
原文地址:http://blog.csdn.net/u010105970/article/details/32953461