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

📄 toolsdlg.cpp

📁 c++ 工具软件 花开花结果共俺说的是双方都
💻 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<WPARAM>(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<HCURSOR>(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<LPNMDATETIMECHANGE>(pNMHDR);

	UpdateData(true);
	UpdateData(false);


	*pResult = 0;
}

⌨️ 快捷键说明

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