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