📄 mainfrm.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 + -