www.pudn.com > Tools.rar > ToolsDlg.cpp


// 自动关机Dlg.cpp : 实现文件 
// 
 
#include "stdafx.h" 
#include "Tools.h" 
#include "ToolsDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 
 
 
// CToolsDlg 对话框 
 
 
 
CToolsDlg::CToolsDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CToolsDlg::IDD, pParent) 
	, m_iTime(0) 
	, m_iMoniNum(0) 
	, m_iRunTime(900) 
	, m_bCheckShut(false) 
	, m_sNowTime(_T("")) 
	, m_ShutTime(COleDateTime::GetCurrentTime()) 
	, m_sLeftTime(_T("")) 
{ 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
	//m_pWriteFile = fopen( "\\匹配结果.txt", "a+" ); 
	//m_pWriteFile1 = fopen( "\\wjh1.txt", "a+" ); 
	m_bRunGame = false; 
} 
 
CToolsDlg::~CToolsDlg() 
{ 
	//fclose(m_pWriteFile); 
	//fclose(m_pWriteFile1); 
	//fclose(m_pMoniFile); 
} 
 
void CToolsDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
 
	//DDX_Control(pDX,IDC_EDIT_NOWTIME,m_NowTime); 
	//DDX_Control(pDX, IDC_EDIT1, m_CloseTime); 
	//DDX_Control(pDX,IDC_EDIT_HOUR,m_Hour); 
	//DDX_Control(pDX,IDC_EDIT_MIN,m_Min); 
	//DDX_Control(pDX,IDC_EDIT_SEC,m_Sec);	 
	DDX_Control(pDX, IDC_CHECK_FROCE, m_Force); 
	DDX_Control(pDX, IDC_CHECK_AUTORUN, m_AutoRun); 
	DDX_Text(pDX, IDC_EDIT1, m_iTime); 
	DDX_Text(pDX, IDC_STATIC_NOW, m_sNowTime); 
	DDX_Control(pDX, IDC_CHECK_SHUT, m_btnCheckShut); 
	DDX_DateTimeCtrl(pDX, IDC_SHUT_TIME, m_ShutTime); 
	DDX_Text(pDX, IDC_STATIC_LEFT, m_sLeftTime); 
} 
 
BEGIN_MESSAGE_MAP(CToolsDlg, CDialog) 
	ON_WM_SYSCOMMAND() 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	ON_WM_TIMER() 
	ON_WM_QUERYENDSESSION() 
	//}}AFX_MSG_MAP 
	ON_BN_CLICKED(IDC_SETPARA, OnBnClickedSetPara) 
	ON_BN_CLICKED(IDOK, OnBnClickedOk) 
	//{{AFX_MSG_MAP(CToolsDlg) 
	//ON_COMMAND(ID_MENU_ABORT, OnMenuAbort) 
	ON_COMMAND(ID_MENU_MAIN, OnMenuMain) 
	//ON_COMMAND(ID_MENU_NOWSHUT, OnMenuNowshut) 
	ON_COMMAND(ID_MENU_EXIT, OnMenuExit) 
	//}}AFX_MSG_MAP 
	ON_WM_CTLCOLOR() 
	ON_BN_CLICKED(IDC_CHECK_SHUT, OnBnClickedCheckShut) 
	ON_NOTIFY(DTN_DATETIMECHANGE, IDC_SHUT_TIME, OnDtnDatetimechangeShutTime) 
END_MESSAGE_MAP() 
 
 
// CToolsDlg 消息处理程序 
 
BOOL CToolsDlg::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
 
	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 
	//  执行此操作 
	SetIcon(m_hIcon, TRUE);			// 设置大图标 
	SetIcon(m_hIcon, FALSE);		// 设置小图标 
 
	// TODO:在此添加额外的初始化代码 
	CString hotkey = "H"; 
	RegisterHotKey(this->m_hWnd,0xa001,MOD_CONTROL,(UINT)hotkey[0]); 
	SetTimer(1,500,NULL); 
	m_AutoRun.SetCheck(1); 
 
	//m_pMoniFile = fopen("e:\\wjh.txt","r"); 
	//if (m_pMoniFile!=NULL) 
	//{ 
	//	fscanf(m_pMoniFile,"%d",&m_iMoniNum); 
	//	fscanf(m_pMoniFile,"%d",&m_iRunTime); 
	//	for (int i = 0; i < m_iMoniNum; i++) 
	//		fscanf(m_pMoniFile,"%s",&m_strFile[i][0]); 
	//} 
 
	SetTimer(500,500,NULL);	//检测是否有数据段没有终止符 
 
	m_bCheckShut = m_btnCheckShut.GetCheck(); 
	GetDlgItem(IDC_SHUT_TIME)->EnableWindow(m_bCheckShut); 
	UpdateData(FALSE); 
 
 
	NOTIFYICONDATA nid; 
 
	nid.cbSize = sizeof(nid); 
	nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; 
	nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
 
	strcpy(nid.szTip,"工具软件V1.0"); 
	nid.uCallbackMessage = WM_USER + 200; 
	nid.uID = 10; 
	nid.hWnd =m_hWnd; 
 
	Shell_NotifyIcon(NIM_ADD, &nid); 
 
	//ShowWindow(SW_HIDE); 
	m_IsShow = FALSE; 
	SetTimer(0,1000,NULL); 
 
 
	//m_MainMenu.AutoLoad(IDC_MAIN_MENU,this); 
 
	//bmpDigital.LoadBitmap(IDB_DIGITAL); 
	//bmpClock.LoadBitmap(IDB_CLOCK); 
	//MemDC.CreateCompatibleDC(&dc); 
 
 
	//::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);//TopMost 
 
	//SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000); 
	//HINSTANCE hInst = LoadLibrary("User32.DLL");  
	//if(hInst)  
	//{             
	//	typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);           
	//	MYFUNC fun = NULL; 
	//	//取得SetLayeredWindowAttributes函数指针      
	//	fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes"); 
	//	if(fun)fun(this->GetSafeHwnd(),0,160,2);      
	//	FreeLibrary(hInst);  
	//} 
 
 
	return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE 
} 
 
// 如果向对话框添加最小化按钮,则需要下面的代码 
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, 
//  这将由框架自动完成。 
 
void CToolsDlg::OnPaint()  
{ 
	if (IsIconic()) 
	{ 
		CPaintDC dc(this); // 用于绘制的设备上下文 
 
		SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); 
 
		// 使图标在工作矩形中居中 
		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; 
 
		// 绘制图标 
		dc.DrawIcon(x, y, m_hIcon); 
	} 
	else 
	{ 
		CDialog::OnPaint(); 
	} 
} 
 
//当用户拖动最小化窗口时系统调用此函数取得光标显示。 
HCURSOR CToolsDlg::OnQueryDragIcon() 
{ 
	return static_cast(m_hIcon); 
} 
 
void CToolsDlg::OnTimer(UINT_PTR nIDEvent) 
{ 
	bool bShutDown = false; 
	int hour,min,sec; 
	int yhour,ymin,ysec; 
 
	if (0==nIDEvent) 
	{ 
		COleDateTime nowtime = COleDateTime::GetCurrentTime(); 
		//m_sNowTime = nowtime.Format(_T("%Y-%m-%d %H:%M:%S")); 
		m_sNowTime = nowtime.Format(_T("%H:%M:%S")); 
		UpdateData(FALSE); 
 
		hour = nowtime.GetHour(); 
		min	 = nowtime.GetMinute(); 
		sec  = nowtime.GetSecond(); 
 
		yhour = m_ShutTime.GetHour(); 
		ymin  = m_ShutTime.GetMinute(); 
		ysec  = m_ShutTime.GetSecond(); 
		if (m_bCheckShut) 
		{ 
			COleDateTime Lefttime; 
			//m_sLeftTime 
			Lefttime.m_dt = m_ShutTime.m_dt -  nowtime.m_dt; 
			if (Lefttime.m_dt >= 0) 
				m_sLeftTime = Lefttime.Format(_T("%H:%M:%S")); 
		} 
		if(hour == yhour && min == ymin && sec == ysec &&m_bCheckShut == true) 
		{ 
			ShutDown(); 
			//AfxMessageBox("时间到"); 
		} 
	} 
 
	//HANDLE snapshot=CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0) ; 
	//if(snapshot == NULL)return ; 
 
	////m_lisProcess.SetRedraw(FALSE); 
	//SHFILEINFO shSmall; 
	//int nIndex; 
	//CString str; 
 
	//PROCESSENTRY32 processinfo ; 
	//processinfo.dwSize=sizeof(processinfo) ; 
 
	//BOOL status=Process32First(snapshot,&processinfo) ; 
	//bool bFind; 
	//bFind = false; 
	//while (status) 
	//{ 
	//	ZeroMemory(&shSmall, sizeof(shSmall));		 
	//	SHGetFileInfo(processinfo.szExeFile,0,&shSmall,sizeof(shSmall),SHGFI_ICON | SHGFI_SMALLICON); 
	//	for (int i = 0; i < m_iMoniNum; i++) 
	//	{ 
	//		nIndex = strcmp(m_strFile[i],processinfo.szExeFile); 
	//		if (nIndex == 0) 
	//		{ 
	//			bFind = true; 
	//			if (m_bRunGame == false) 
	//			{ 
	//				m_BeginTime = COleDateTime::GetCurrentTime(); 
	//				str.Format("%s开始运行!",m_strFile[i]); 
	//				OutPutInfo(str); 
	//				m_bRunGame = true; 
	//			} 
	//		} 
	//	} 
	//	status = Process32Next (snapshot, &processinfo) ; 
	//} 
	//if (bFind == false && m_bRunGame) 
	//{ 
	//	m_bRunGame = false; 
	//	OutPutInfo("结束运行!"); 
	//} 
	//m_curTime = COleDateTime::GetCurrentTime(); 
	//if (m_bRunGame > 0 ) 
	//{ 
	//	double dSpan = (m_curTime.m_dt-m_BeginTime.m_dt)*24*3600; 
	//	m_iTime = m_iRunTime-dSpan; 
	//	if (dSpan >m_iRunTime && bShutDown == false) 
	//	{ 
	//		bShutDown = true; 
	//		ShutDown(); 
	//	} 
	//	UpdateData(false); 
	//} 
	CDialog::OnTimer(nIDEvent); 
} 
 
bool CToolsDlg::OpenRegKey() 
{ 
	//Software\\Microsoft\\Windows\\CurrentVersion\\Run 
	HKEY m_hKey; 
	RegOpenKey(HKEY_LOCAL_MACHINE,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),&m_hKey); 
	//注意,此处注册表格式为CString,不能用DWORD来读 
	DWORD dwType; 
	DWORD dwSize=200; 
	char szString[2550]; 
	long lReturn = RegQueryValueEx(m_hKey,"ShutDown",NULL,&dwType,(BYTE *)szString,&dwSize); 
	if(lReturn == ERROR_SUCCESS) 
		return true; 
	else 
		return false; 
	RegCloseKey(m_hKey); 
} 
 
 
void CToolsDlg::WriteButton() 
{ 
	//设置强行关机 
 
	int pos=1;//写入文件位置 
	if(m_Force.GetCheck()) 
	{ 
		m_forcecheck = true; 
	} 
	else 
	{ 
		m_forcecheck = false; 
	} 
} 
//设置m_NewTime 
void CToolsDlg::OnBnClickedSetPara() 
{ 
 
	//设置自动运行 
	if(m_AutoRun.GetCheck()) 
	{ 
		WriteReg(GetMyPath()); 
		m_autorun = true; 
	} 
	else 
	{ 
		DelRegKey(); 
		m_autorun = false; 
	} 
} 
 
void CToolsDlg::DelRegKey() 
{ 
	HKEY hKey; 
	::RegOpenKey(HKEY_LOCAL_MACHINE,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),&hKey); 
	RegDeleteValue(hKey,"ShutDown"); 
	RegCloseKey(hKey); 
} 
 
 
void CToolsDlg::ShutDown() 
{ 
	//取得计算机控制特权 
 
	HANDLE hProcess,hToken; 
	TOKEN_PRIVILEGES Privileges; 
	LUID luid; 
	hProcess = GetCurrentProcess(); 
 
	OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken); 
	Privileges.PrivilegeCount = 1; 
	LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid); 
	Privileges.Privileges[0].Luid = luid; 
	Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
	AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL); 
	//OutPutInfo("强行关机"); 
	if(m_forcecheck==true)//强行关机 
		ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF|EWX_FORCE,NULL); 
	else 
		ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF,NULL); 
} 
 
void CToolsDlg::WriteReg(CString path) 
{ 
	CString str; 
	HKEY hKey; 
	str=_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"); 
	RegOpenKey(HKEY_LOCAL_MACHINE,str,&hKey); 
	_splitpath(path.GetBuffer(0),NULL,NULL,str.GetBufferSetLength(MAX_PATH+1),NULL); 
	str.ReleaseBuffer(); 
	path.ReleaseBuffer(); 
	::RegSetValueEx(hKey,"ShutDown",0,REG_SZ,(CONST BYTE*)path.GetBuffer(0),path.GetLength()); 
	path.ReleaseBuffer(); 
	RegCloseKey(hKey); 
} 
 
CString CToolsDlg::GetMyPath() 
{ 
	CString m_Path; 
	GetModuleFileName(NULL,m_Path.GetBufferSetLength(MAX_PATH),MAX_PATH+1); 
	m_Path.ReleaseBuffer(); 
	return m_Path; 
} 
 
void CToolsDlg::OnBnClickedOk() 
{ 
	ShowWindow(SW_HIDE); 
} 
 
BOOL CToolsDlg::PreTranslateMessage(MSG *pMsg) 
{ 
	if(pMsg->message==WM_HOTKEY&&pMsg->wParam==0xa001) 
		ShowWindow(SW_SHOW); 
	return CDialog::PreTranslateMessage(pMsg); 
} 
 
 
void CToolsDlg::OutPutInfo(CString sInfo) 
{ 
	CString sTime; 
	CString sOut; 
	m_curTime = COleDateTime::GetCurrentTime(); 
	sTime = m_curTime.Format("%Y-%m-%d %H:%M:%S"); 
	//fprintf(m_pWriteFile,"%s %s\n",sTime,sInfo); 
	//fflush(m_pWriteFile); 
	//fprintf(m_pWriteFile1,"%s %s\n",sTime,sInfo); 
	//fflush(m_pWriteFile1); 
} 
 
 
LRESULT CToolsDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)  
{ 
	switch(message) 
	{ 
	case WM_USER + 200: 
		if(lParam == WM_LBUTTONDBLCLK) 
		{ 
			if(!m_IsShow) 
			{ 
				ShowWindow(SW_SHOWNORMAL); 
				BringWindowToTop(); 
				m_IsShow = TRUE; 
			} 
			else 
			{ 
				ShowWindow(SW_HIDE); 
				m_IsShow = FALSE; 
			} 
		} 
 
		if(lParam == WM_RBUTTONDOWN) 
		{ 
			CMenu menu; 
 
			if(!menu.LoadMenu(IDR_MENU_MAIN))	break; 
 
			//popmenu.LoadMenu(IDR_MENU_MAIN); 
			//popmenu.ModifyODMenu(NULL,ID_MENU_MAIN,IDR_TOOLBAR); 
			//popmenu.ModifyODMenu(NULL,ID_MENU_NOWSHUT,IDR_TOOLBAR); 
			//popmenu.ModifyODMenu(NULL,ID_MENU_ABORT,IDR_TOOLBAR); 
			//popmenu.ModifyODMenu(NULL,ID_MENU_EXIT,IDR_TOOLBAR); 
			////popmenu.GetSubMenu(0)->RemoveMenu(6,MF_BYPOSITION); 
 
			//CPoint pos; 
			//GetCursorPos(&pos); 
			//BCMenu *psub = (BCMenu *)popmenu.GetSubMenu(0); 
			//psub->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,this); 
			//popmenu.DestroyMenu(); 
 
			CMenu* pSubMenu = menu.GetSubMenu(0); 
 
			CPoint pos; 
			GetCursorPos(&pos); 
			pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,pos.x,pos.y, this, NULL); 
			menu.DestroyMenu(); 
		} 
		break; 
	}	 
	return CDialog::DefWindowProc(message, wParam, lParam); 
} 
void CToolsDlg::OnMenuMain()  
{ 
	ShowWindow(SW_SHOWNORMAL); 
	BringWindowToTop(); 
	CenterWindow(); 
	m_IsShow = TRUE; 
} 
void CToolsDlg::OnMenuExit()  
{ 
	DestroyWindow(); 
} 
 
HBRUSH CToolsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
 
	//if(nCtlColor == CTLCOLOR_STATIC) 
	//{ 
	//	CString ss; 
	//	pWnd->GetWindowText(ss); 
	//	if(memcmp(ss,"现在时间",8) != 0 && 
	//		memcmp(ss,"预定时间",8) != 0 && 
	//		memcmp(ss,"自定义时间",10) != 0 && 
	//		memcmp(ss,"条件设置",8) !=0 ) 
	//	{ 
	//		pDC->SetTextColor(RGB(0,0,238)); 
	//	} 
	//	else 
	//	{ 
	//		pDC->SetTextColor(RGB(250,0,238)); 
	//	} 
	//} 
	return hbr; 
} 
 
void CToolsDlg::OnBnClickedCheckShut() 
{ 
	// TODO: 在此添加控件通知处理程序代码 
	UpdateData(TRUE); 
	m_bCheckShut = m_btnCheckShut.GetCheck(); 
	GetDlgItem(IDC_SHUT_TIME)->EnableWindow(m_bCheckShut); 
	UpdateData(FALSE); 
} 
 
void CToolsDlg::OnDtnDatetimechangeShutTime(NMHDR *pNMHDR, LRESULT *pResult) 
{ 
	//LPNMDATETIMECHANGE pDTChange = reinterpret_cast(pNMHDR); 
 
	UpdateData(true); 
	UpdateData(false); 
 
 
	*pResult = 0; 
}