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

📄 mainfrm.cpp

📁 这是书上的代码
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "TimeClose.h"

#include "MainFrm.h"
#include "SetTimeDlg.h"

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

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

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_CLOSE()
	ON_WM_TIMER()
	ON_MESSAGE(WM_MY_TRAY, OnTray)
	ON_COMMAND(ID_RBUTTONDOWN_EXIT, OnRbuttondownExit)
	//}}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(): m_tray(IDR_TRAYICON)
{
m_bShutdown = FALSE;
m_lHour=22;
m_lMinute=0;	
	
}

CMainFrame::~CMainFrame()
{
}

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

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      
	}

	m_tray.SetNotificationWnd(this, WM_MY_TRAY);

	m_tray.SetIcon(IDI_MYICON);
	//设定时间隔
	m_uTimer100 = SetTimer(1, 8000, NULL);
	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);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


void CMainFrame::OnClose() 
{
	if (m_bShutdown)
		CFrameWnd::OnClose();
	else
		ShowWindow(SW_HIDE);
}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
	CTime NowTime=CTime::GetCurrentTime();
	if(m_bTwoRest&&NowTime.GetDayOfWeek()==6&&NowTime.GetDayOfWeek()==7)
	{//考虑双休日
		CFrameWnd::OnTimer(nIDEvent);
		return;
	}
	if(NowTime.GetHour()==m_lHour&&NowTime.GetMinute()==m_lMinute)
	OffComputer();
	
	CFrameWnd::OnTimer(nIDEvent);
}

LRESULT CMainFrame::OnTray(WPARAM uID, LPARAM lEvent)
{
	//禁止重复调用
	static BOOL b1=true;
	// 响应鼠标双击
	if(lEvent==WM_LBUTTONDBLCLK&&b1)
{
	b1=false;
	CSetTimeDlg* pSetTimeDlg;
	pSetTimeDlg=new CSetTimeDlg;
	pSetTimeDlg->m_lHour=m_lHour;
	pSetTimeDlg->m_lMinute=m_lMinute;
	//可显示主窗口
	//AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
	//pSetTimeDlg->ShowWindow(SW_SHOW);
	if(pSetTimeDlg->DoModal()==IDOK)
	{
	m_lHour=pSetTimeDlg->m_lHour;
	m_lMinute=pSetTimeDlg->m_lMinute;		
	m_bTwoRest=pSetTimeDlg->m_bTwoRest;
	}
	delete pSetTimeDlg;
	b1=true;
	return TRUE;

}
	return m_tray.OnTrayNotification(uID, lEvent);

}

void CMainFrame::OnRbuttondownExit() 
{
	m_bShutdown = TRUE;		// really exit
	SendMessage(WM_CLOSE);	
}

void CMainFrame::OffComputer()
{
   // MessageBox("数据"); 
	HANDLE hProcess, hToken; 
     TOKEN_PRIVILEGES NewState; 
     DWORD ProcessId, ReturnLength = 0; 
     LUID luidPrivilegeLUID; 
     //返回当前进程的一个伪句柄
     ProcessId = GetCurrentProcessId(); 
	//指定对一个进程对象的所有可能访问标志
	 hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId); 
   //用于改变访问标记中指定的特权
	 if(!OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken)) 
     return ; 
     //检取在指定系统上使用的局部唯一标识符
     if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luidPrivilegeLUID)) 
     return ; 
     //允许指定访问标记中的特权
     NewState.PrivilegeCount = 1; 
     NewState.Privileges[0].Luid = luidPrivilegeLUID; 
     NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
     if(AdjustTokenPrivileges(hToken, FALSE, &NewState, NULL, NULL, NULL)) 
     ExitWindowsEx(EWX_FORCE | EWX_POWEROFF, 0); 
     return ; 

}

⌨️ 快捷键说明

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