智能关机系统

来源:互联网 发布:微博怎么推广淘宝店铺 编辑:程序博客网 时间:2024/04/29 07:33

最近在网上看到了一个智能关机系统,看起来感觉功能不错,就想自己写一个,说干就干,使用如鹏网的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关机


程序还可以关闭显示器 、重新启动、在此我不再一一演示


单击此处下载程序


0 0
原创粉丝点击