⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 定时关机
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "TimeClose.h"
#include "MainDlg.h"
#include "MainFrm.h"



#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
	ON_UPDATE_COMMAND_UI(ID_MENUITEM32785, OnUpdateMenuitem32785)
	ON_COMMAND(ID_MENUITEM32785, OnMenuitem32785)
ON_MESSAGE(WM_NID, Onnid)
ON_MESSAGE(WM_RUN,OnRun)
ON_MESSAGE(WM_STOP,OnStop)

	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
		ID_INDICATOR_CAPS,
		ID_INDICATOR_NUM,
		ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame() :run(false),hour(0),minute(0),show(true)
{
	// TODO: add member initialization code here
	Create(NULL,"ShutDown");
	nid.cbSize=sizeof(NOTIFYICONDATA);
	nid.uCallbackMessage=WM_NID;
	nid.hWnd=m_hWnd;
	nid.hIcon=AfxGetApp()->LoadIcon(GetRun()?IDI_RUN:IDI_STOP);
	nid.uFlags=NIF_ICON | NIF_TIP | NIF_MESSAGE;
	CString ss=GetRun()?"正在执行":"等待中";
	strcpy(nid.szTip,ss);
	nid.uID=GetRun()?IDI_RUN:IDI_STOP;
	Shell_NotifyIcon(NIM_ADD,&nid);
	
}

CMainFrame::~CMainFrame()
{
	Shell_NotifyIcon(NIM_DELETE,&nid);
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	
	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}



void CMainFrame::Onnid(WPARAM wParam,LPARAM lParam){
	if(wParam!=IDI_STOP && wParam!=IDI_RUN)
		return;
	switch(lParam){
	case WM_LBUTTONDBLCLK :
		if(!show){
			CMainDlg CMain;
			CMain.SetHH(hour);
			CMain.SetMM(minute);
			CMain.SetHwnd(GetSafeHwnd());
			CMain.SetRun(GetRun());	
			show=true;
			if(CMain.DoModal()==IDOK){
				show=false;
				SetHour(CMain.m_hour);
				SetMin(CMain.m_min);
				Sethow(CMain.Gethow());
			}
		}
		
		break;
	case WM_RBUTTONDOWN :
	   CMenu menu;
		menu.LoadMenu(IDR_MENU);
		CPoint pp;
		GetCursorPos(&pp);
		CMenu *pop=menu.GetSubMenu(0);
		::SetForegroundWindow(nid.hWnd);
		pop->TrackPopupMenu(TPM_LEFTALIGN,pp.x,pp.y,this);

		break;
		
	}
}
	
	void CMainFrame::OnRun(WPARAM wParam,LPARAM lParam){
		run=true;
		nid.hIcon=AfxGetApp()->LoadIcon(IDI_RUN);
		CString ss;
		ss.Format("执行中…… %d:%d",hour,minute);
		strcpy(nid.szTip,ss);
		Shell_NotifyIcon(NIM_MODIFY,&nid);
		SetTimer(1,1000,NULL);
		
	}
	
	void CMainFrame::OnStop(WPARAM wParam,LPARAM lParam){
		run=false;
		nid.hIcon=AfxGetApp()->LoadIcon(IDI_STOP);
		CString ss;
		ss.Format("等待中……");
		strcpy(nid.szTip,ss);
		Shell_NotifyIcon(NIM_MODIFY,&nid);
		KillTimer(1);
	}
	
	void CMainFrame::ShutDown(){
		HANDLE handle;
		DWORD processid;
		HANDLE token;
		TOKEN_PRIVILEGES tp;
		LUID luid;
		
		switch(how){
		case 0:
			
			processid=::GetCurrentProcessId();
			handle=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,processid);
			
			
			::OpenProcessToken(handle,TOKEN_ADJUST_PRIVILEGES,&token);
			::CloseHandle(handle);
			
			
			::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
			tp.PrivilegeCount=1;
			tp.Privileges[0].Luid=luid;
			tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
			::AdjustTokenPrivileges(token,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
			::ExitWindowsEx(EWX_POWEROFF | EWX_SHUTDOWN,0);
			
			break ;
		case 1:
			
			processid=::GetCurrentProcessId();
			handle=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,processid);
			
			
			::OpenProcessToken(handle,TOKEN_ADJUST_PRIVILEGES,&token);
			::CloseHandle(handle);
			
			
			::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
			tp.PrivilegeCount=1;
			tp.Privileges[0].Luid=luid;
			tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
			::AdjustTokenPrivileges(token,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
			::ExitWindowsEx(EWX_LOGOFF,0);
			
			break;
		case 2:
			
			processid=::GetCurrentProcessId();
			handle=::OpenProcess(PROCESS_ALL_ACCESS|STANDARD_RIGHTS_REQUIRED,FALSE,processid);
			
			
			::OpenProcessToken(handle,TOKEN_ADJUST_PRIVILEGES,&token);
			::CloseHandle(handle);
			
			
			::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
			tp.PrivilegeCount=1;
			tp.Privileges[0].Luid=luid;
			tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
			::AdjustTokenPrivileges(token,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
			::ExitWindowsEx(EWX_REBOOT,0);
			
			break;
		}
		KillTimer(1);
	}
	
	
#endif //_DEBUG
	
	/////////////////////////////////////////////////////////////////////////////
	// CMainFrame message handlers
	
	
	void CMainFrame::OnTimer(UINT nIDEvent) 
	{
		if(nIDEvent==1){
			CTime time=CTime::GetCurrentTime();
			if(time.GetHour()==hour&&time.GetMinute()==minute)
				ShutDown();
		}
		CFrameWnd::OnTimer(nIDEvent);
	}
	

void CMainFrame::OnUpdateMenuitem32785(CCmdUI* pCmdUI) 
{
pCmdUI->Enable();	
}

void CMainFrame::OnMenuitem32785() 
{
PostMessage(WM_CLOSE);	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -