基本信息
源码名称:C++ 自动关机 实例源码
源码大小:0.04M
文件格式:.zip
开发语言:C/C++
更新时间:2015-10-31
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
// AutoShutDlg.cpp : implementation file // #include "stdafx.h" #include "AutoShut.h" #include "AutoShutDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) afx_msg void OnUrl(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) ON_BN_CLICKED(IDC_URL, OnUrl) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAutoShutDlg dialog CAutoShutDlg::CAutoShutDlg(CWnd* pParent /*=NULL*/) : CDialog(CAutoShutDlg::IDD, pParent) { //{{AFX_DATA_INIT(CAutoShutDlg) //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CAutoShutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAutoShutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAutoShutDlg, CDialog) //{{AFX_MSG_MAP(CAutoShutDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() ON_BN_CLICKED(IDC_EXIT, OnExit) ON_BN_CLICKED(IDC_AUTOSHUT, OnAutoshut) ON_BN_CLICKED(IDC_HELP, OnHelp) ON_BN_CLICKED(IDC_VISITWEB, OnVisitweb) ON_CBN_SELCHANGE(IDC_YEARCOMBO, OnSelchangeYearcombo) ON_CBN_SELCHANGE(IDC_MONTHCOMBO, OnSelchangeMonthcombo) ON_EN_CHANGE(IDC_HOUR, OnChangeHour) ON_EN_CHANGE(IDC_MINUTE, OnChangeMinute) ON_EN_CHANGE(IDC_SECOND, OnChangeSecond) ON_BN_CLICKED(IDC_SHUTRADIO, OnShutradio) ON_BN_CLICKED(IDC_RESTARTRADIO, OnRestartradio) ON_BN_CLICKED(IDC_LOGOUT, OnLogout) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAutoShutDlg message handlers BOOL CAutoShutDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_tnid.cbSize=sizeof(NOTIFYICONDATA); m_tnid.hWnd=this->m_hWnd; m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; m_tnid.uCallbackMessage=MYWM_NOTIFYICON; CString szToolTip; szToolTip=_T("Windows定时关机助手1.1"); _tcscpy(m_tnid.szTip, szToolTip); m_tnid.uID=IDR_MAINFRAME; HICON hIcon; hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_tnid.hIcon=hIcon; ::Shell_NotifyIcon(NIM_ADD,&m_tnid); if(hIcon)::DestroyIcon(hIcon); ShowTime(); SetTimer(0,100,0); CTime currentTime = CTime::GetCurrentTime(); int year = currentTime.GetYear(); int month = currentTime.GetMonth(); int day = currentTime.GetDay(); CComboBox *yearCombo = (CComboBox*)GetDlgItem(IDC_YEARCOMBO); CComboBox *monthCombo = (CComboBox*)GetDlgItem(IDC_MONTHCOMBO); CComboBox *dayCombo = (CComboBox*)GetDlgItem(IDC_DAYCOMBO); yearCombo->SetCurSel(year-2008); monthCombo->SetCurSel(month-1); InitDaycombo(); dayCombo->SetCurSel(day-1); SetDlgItemText(IDC_HOUR,"00"); SetDlgItemText(IDC_MINUTE,"00"); SetDlgItemText(IDC_SECOND,"00"); CheckDlgButton(IDC_SHUTRADIO,TRUE); return TRUE; // return TRUE unless you set the focus to a control } void CAutoShutDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CAutoShutDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle 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; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CAutoShutDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CAutoShutDlg::ShowTime() { CTime currentTime = CTime::GetCurrentTime(); int year = currentTime.GetYear(); int month = currentTime.GetMonth(); int day = currentTime.GetDay(); int hour = currentTime.GetHour(); int minute = currentTime.GetMinute(); int second = currentTime.GetSecond(); CString yearS,monthS,dayS,hourS,minuteS,secondS; yearS.Format("%d",year); monthS.Format("%d",month); dayS.Format("%d",day); hourS.Format("%d",hour); minuteS.Format("%d",minute); secondS.Format("%d",second); CString timeNow = yearS "年" monthS "月" dayS "日" hourS "时" minuteS "分" secondS "秒"; GetDlgItem(IDC_TIMENOW)->SetWindowText(timeNow); } int ii = 0; int radio = 1; void CAutoShutDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default switch(nIDEvent) { case 0: ShowTime(); CDialog::OnTimer(nIDEvent); break; case 1: CTime shutTime = GetSetTime(); CTimeSpan oneMinTime(0,0,1,0); if((shutTime - CTime::GetCurrentTime()) < oneMinTime) { if(radio == 1) { if(ii == 0) { ii ; if(MessageBox("计算机将于1分钟内关闭,是否取消关闭?按\"是\"则取消自动关闭.若允许自动关闭,请保存尚未关闭的程序!","自动关机警告",MB_YESNO) == IDYES) { KillTimer(1); ii = 0; } } } else if(radio == 2) { if(ii == 0) { ii ; if(MessageBox("计算机将于1分钟内注销,是否取消注销?按\"是\"则取消自动注销.若允许自动关闭,请保存尚未关闭的程序!","自动注销警告",MB_YESNO) == IDYES) { KillTimer(1); ii = 0; } } } else if(radio == 3) { if(ii == 0) { ii ; if(MessageBox("计算机将于1分钟内重启,是否取消重启?按\"是\"则取消自动重启.若允许自动关闭,请保存尚未关闭的程序!","自动重启警告",MB_YESNO) == IDYES) { KillTimer(1); ii = 0; } } } } if(CTime::GetCurrentTime() == shutTime) { HANDLE hToken; TOKEN_PRIVILEGES tkp; if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken)) { LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); if(radio == 1) { ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF,0); } else if(radio == 2) { ExitWindowsEx(EWX_LOGOFF,0); } else if(radio == 3) { ExitWindowsEx(EWX_REBOOT,0); } } } break; } } void CAutoShutDlg::OnAutoshut() { // TODO: Add your control notification handler code here CTime shutTime = GetSetTime(); if(shutTime < CTime::GetCurrentTime()) { MessageBox("设置的时间不能早于当前系统时间!"); } else { SetTimer(1,1000,0); AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE); if(radio == 1) { MessageBox("定时关机已启动!","定时关机已启动"); } else if(radio == 2) { MessageBox("定时注销已启动!","定时关机已启动"); } else if(radio == 3) { MessageBox("定时重启已启动!","定时关机已启动"); } } } void CAutoShutDlg::OnExit() { // TODO: Add your control notification handler code here this->SendMessage(WM_CLOSE); } void CAutoShutDlg::OnHelp() { // TODO: Add your control notification handler code here CAboutDlg aboutDlg; aboutDlg.DoModal(); } void CAutoShutDlg::OnVisitweb() { // TODO: Add your control notification handler code here ShellExecute(NULL,"open","http://www.tobeahero.cn/default.asp?cateID=5",NULL,NULL,SW_SHOWNORMAL); } void CAutoShutDlg::InitDaycombo() { CComboBox *yearCombo = (CComboBox*)GetDlgItem(IDC_YEARCOMBO); CComboBox *monthCombo = (CComboBox*)GetDlgItem(IDC_MONTHCOMBO); CComboBox *dayCombo = (CComboBox*)GetDlgItem(IDC_DAYCOMBO); int year = yearCombo->GetCurSel() 2008; int month = monthCombo->GetCurSel() 1; if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { for(int i = 1; i<32; i ) { CString dayS; dayS.Format("%d",i); dayCombo->AddString(dayS); } } else if(month == 2 && (year%400 == 0 || (year%4 == 0 && year%100 != 0))) { for(int i = 1; i<30; i ) { CString dayS; dayS.Format("%d",i); dayCombo->AddString(dayS); } } else if(month == 4 || month == 6 || month == 9 || month == 11) { for(int i = 1; i<31; i ) { CString dayS; dayS.Format("%d",i); dayCombo->AddString(dayS); } } else { for(int i = 1; i<29; i ) { CString dayS; dayS.Format("%d",i); dayCombo->AddString(dayS); } } dayCombo->SetCurSel(0); } void CAutoShutDlg::OnSelchangeYearcombo() { // TODO: Add your control notification handler code here CComboBox *dayCombo = (CComboBox*)GetDlgItem(IDC_DAYCOMBO); dayCombo->ResetContent(); InitDaycombo(); } void CAutoShutDlg::OnSelchangeMonthcombo() { // TODO: Add your control notification handler code here CComboBox *dayCombo = (CComboBox*)GetDlgItem(IDC_DAYCOMBO); dayCombo->ResetContent(); InitDaycombo(); } void CAutoShutDlg::OnChangeHour() { // TODO: Add your control notification handler code here CString hour ; GetDlgItem(IDC_HOUR)->GetWindowText(hour); if(hour.GetLength() > 2) { GetDlgItem(IDC_HOUR)->SetWindowText("00"); } if(atoi(hour) < 0 || atoi(hour) > 24) { GetDlgItem(IDC_HOUR)->SetWindowText("00"); } } void CAutoShutDlg::OnChangeMinute() { // TODO: Add your control notification handler code here CString minute ; GetDlgItem(IDC_MINUTE)->GetWindowText(minute); if(minute.GetLength() > 2) { GetDlgItem(IDC_MINUTE)->SetWindowText("00"); } if(atoi(minute) < 0 || atoi(minute) > 60) { GetDlgItem(IDC_MINUTE)->SetWindowText("00"); } } void CAutoShutDlg::OnChangeSecond() { // TODO: Add your control notification handler code here CString second ; GetDlgItem(IDC_SECOND)->GetWindowText(second); if(second.GetLength() > 2) { GetDlgItem(IDC_SECOND)->SetWindowText("00"); } if(atoi(second) < 0 || atoi(second) > 60) { GetDlgItem(IDC_SECOND)->SetWindowText("00"); } } void CAboutDlg::OnUrl() { // TODO: Add your control notification handler code here ShellExecute(NULL,"open","http://www.tobeahero.cn/default.asp?cateID=5",NULL,NULL,SW_SHOWNORMAL); } void CAutoShutDlg::OnShutradio() { // TODO: Add your control notification handler code here radio = 1; } void CAutoShutDlg::OnRestartradio() { // TODO: Add your control notification handler code here radio = 3; } void CAutoShutDlg::OnLogout() { // TODO: Add your control notification handler code here radio = 2; } CTime CAutoShutDlg::GetSetTime() { CString yearS,monthS,dayS,hourS,minuteS,secondS; GetDlgItemText(IDC_YEARCOMBO,yearS); GetDlgItemText(IDC_MONTHCOMBO,monthS); GetDlgItemText(IDC_DAYCOMBO,dayS); GetDlgItemText(IDC_HOUR,hourS); GetDlgItemText(IDC_MINUTE,minuteS); GetDlgItemText(IDC_SECOND,secondS); return CTime(atoi(yearS),atoi(monthS),atoi(dayS),atoi(hourS),atoi(minuteS),atoi(secondS),-1); } LRESULT CAutoShutDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class switch(message){ case MYWM_NOTIFYICON: //如果是用户定义的消息 if(lParam==WM_LBUTTONDOWN) { //鼠标单击时主窗口出现 AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW); } break; case WM_SYSCOMMAND: //如果是系统消息 if(wParam==SC_MINIMIZE){ //接收到最小化消息时主窗口隐藏 AfxGetApp()->m_pMainWnd-> ShowWindow(SW_HIDE); return 0; } break; } return CDialog::WindowProc(message, wParam, lParam); } void CAutoShutDlg::OnDestroy() { CDialog::OnDestroy(); ::Shell_NotifyIcon(NIM_DELETE,&m_tnid); // TODO: Add your message handler code here }