?? shuntdowndlg.cpp
字號:
SetTimer(SHOWTIME, 1000, NULL);
// 注冊系統熱鍵(暫不檢測成功與否)
RegisterHotKey(m_hWnd, 0, MOD_SHIFT | MOD_CONTROL, 'H');
RegisterHotKey(m_hWnd, 1, MOD_SHIFT | MOD_CONTROL, 'h');
CString strTmp1, strTmp2 = "";
// 年
for(int i = time.nYear ; i < time.nYear + 10 ; i++)
{
strTmp1.Format("%d年", i);
m_Year.AddString(strTmp1);
m_Year.SetCurSel(0);
}
// 月
for(int i = 1 ; i <= 12 ; i++)
{
strTmp1.Format("%.2d", i);
m_Month.AddString(strTmp1 + "月");
strTmp2.Format("%.2d", time.nMonth);
if(strTmp1 == strTmp2)
m_Month.SetCurSel(i - 1);
}
// 日
if(time.nMonth == 2)
{
if(IsRYear(time.nYear))
{
for(int i = 1; i <= 28; i++)
{
strTmp1.Format("%.2d", i);
m_Day.AddString(strTmp1 + "日");
strTmp2.Format("%.2d", time.nDay);
if(strTmp1 == strTmp2)
m_Day.SetCurSel(i - 1);
}
}
else
{
for(int i = 1; i <= 29; i++)
{
strTmp1.Format("%.2d", i);
m_Day.AddString(strTmp1 + "日");
strTmp2.Format("%.2d", time.nDay);
if(strTmp1 == strTmp2)
m_Day.SetCurSel(i - 1);
}
}
}
else
{
int nMax = (time.nMonth == 1 || time.nMonth == 3 || time.nMonth == 5 || time.nMonth == 7 || time.nMonth == 8 || time.nMonth == 10 || time.nMonth == 12) ? 31 : 30;
for(int i = 1; i <= nMax; i++)
{
strTmp1.Format("%.2d", i);
m_Day.AddString(strTmp1 + "日");
strTmp2.Format("%.2d", time.nDay);
if(strTmp1 == strTmp2)
m_Day.SetCurSel(i - 1);
}
}
// 時
for(int i = 0; i <= 23; i++)
{
strTmp1.Format("%.2d", i);
m_Hour.AddString(strTmp1 + "時");
}
// 分
for(int i = 0; i <= 59; i++)
{
strTmp1.Format("%.2d", i);
m_Second.AddString(strTmp1 + "分");
}
}
// 取系統時間
void CShuntDownDlg::GetTime(PTIME pTime)
{
memset(pTime, 0, sizeof(TIME));
SYSTEMTIME systime;
::GetSystemTime(&systime);
pTime->nYear = systime.wYear; // year
pTime->nMonth = systime.wMonth; // month
pTime->nHour = systime.wHour + 8 >= 24 ? systime.wHour + 8 - 24 : systime.wHour + 8; // hour
pTime->nDay = pTime->nHour < 8 ? systime.wDay + 1 : systime.wDay; // day
pTime->nMinute = systime.wMinute; // minute
pTime->nSecond = systime.wSecond; // second
pTime->nMillisecond = systime.wMilliseconds; // millisecond
}
// 關機函數
bool CShuntDownDlg::ShuntDown()
{
OSVERSIONINFOEX osvi;
osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
if(!GetVersionEx((OSVERSIONINFO *)&osvi))
return false;
switch(osvi.dwPlatformId)
{
case VER_PLATFORM_WIN32_WINDOWS:
if( (osvi.dwMajorVersion==4 && osvi.dwMinorVersion ==10) || //win 98
(osvi.dwMajorVersion==4 && osvi.dwMinorVersion ==90) || //win Me
(osvi.dwMajorVersion==3 && osvi.dwMinorVersion ==51) || //win NT 3.51
(osvi.dwMajorVersion==4 && osvi.dwMinorVersion ==0)) //win NT 4.0
{
//強制終止進程, 關機
return ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN, 1) == 0 ? false : true;
}
break;
case VER_PLATFORM_WIN32_NT:
if( (osvi.dwMajorVersion==5 && osvi.dwMinorVersion ==0) || //win 2000
(osvi.dwMajorVersion==5 && osvi.dwMinorVersion ==1) || //win xp
(osvi.dwMajorVersion==5 && osvi.dwMinorVersion ==2)) //win 2003
{
// 提權
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
CloseHandle(hToken);
//強制終止進程, 關機
return ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN, 1) == 0 ? false : true;
}
break;
default:
return false;
}
return false;
}
// 關閉一些窗口
void CShuntDownDlg::CloseWindow()
{
{ // 立即結束窗口
FindWnd findwnd;
vector<HWND> hWnds = findwnd.FindToplevel(0x94C808C4, 0x00010101, "#32770");
for(int i = 0; i < hWnds.size(); i++)
{
HWND hWnd = findwnd.FindChild(hWnds[i], 0x00000103, 0x50010000, 0x00000004, "Button", "立即結束(&E)");
if(hWnd != (HWND)0xFFFF)
{
::SendMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
::SendMessage(hWnd, WM_LBUTTONUP, 0, 0);
}
}
}
{ // 影子系統窗口
FindWnd findwnd;
vector<HWND> hWnds = findwnd.FindToplevel(0x94000044, 0x00010000, "#32770");
for(int i = 0; i < hWnds.size(); i++)
{
HWND hWnd = findwnd.FindChild(hWnds[i], 0x000003F2, 0x5001000B, 0x00000004, "Button", "關機(&U)");
if(hWnd != (HWND)0xFFFF)
{
::SendMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
::SendMessage(hWnd, WM_LBUTTONUP, 0, 0);
}
}
}
{ // 發送錯誤報告窗口
FindWnd findwnd;
vector<HWND> hWnds = findwnd.FindToplevel(0x94C000C4, 0x00010109, "#32770");
for(int i = 0; i < hWnds.size(); i++)
{
HWND hWnd = findwnd.FindChild(hWnds[i], 0x000003E9, 0x50010001, 0x00000004, "Button", "不發送(&D)");
if(hWnd != (HWND)0xFFFF)
{
::SendMessage(hWnd, WM_LBUTTONDOWN, 0, 0);
::SendMessage(hWnd, WM_LBUTTONUP, 0, 0);
}
}
}
}
void CShuntDownDlg::OnCancel()
{
if(m_bSetting)
{
if(IDYES == ::MessageBox(m_hWnd, "如果退出本程序, 自動關機功能將不再生效, 您確定要退出嗎?", "提示", MB_YESNO | MB_DEFBUTTON2))
CDialog::OnCancel();
}
else
CDialog::OnCancel();
}
void CShuntDownDlg::OnOK()
{
if(m_bSetting)
{
if(IDYES == ::MessageBox(m_hWnd, "如果退出本程序, 自動關機功能將不再生效, 您確定要退出嗎?", "提示", MB_YESNO | MB_DEFBUTTON2))
CDialog::OnOK();
}
else
CDialog::OnCancel();
}
// 當"年份"改變時
void CShuntDownDlg::OnSelchangeComboYear()
{
TIME time;
GetTime(&time);
char buf[50] = {0};
// 年
::GetDlgItemText(m_hWnd, IDC_COMBO_YEAR, buf, 5);
int nYear = atoi(buf);
// 月
memset(buf, 0, 50);
::GetDlgItemText(m_hWnd, IDC_COMBO_MONTH, buf, 3);
int nMonth = atoi(buf);
CString strTmp1, strTmp2 = "";
// 日
for(int i = m_Day.GetCount() - 1 ; i >= 0; i--)
m_Day.DeleteString(m_Day.GetCount() - 1);
if(nMonth == 2)
{
if(IsRYear(nYear))
{
for(int i = 1; i <= 28; i++)
{
strTmp1.Format("%.2d", i);
m_Day.AddString(strTmp1 + "日");
strTmp2.Format("%.2d", time.nDay);
if(strTmp1 == strTmp2)
m_Day.SetCurSel(i - 1);
}
}
else
{
for(int i = 1; i <= 29; i++)
{
strTmp1.Format("%.2d", i);
m_Day.AddString(strTmp1 + "日");
strTmp2.Format("%.2d", time.nDay);
if(strTmp1 == strTmp2)
m_Day.SetCurSel(i - 1);
}
}
}
else
{
int nMax = (nMonth == 1 || nMonth == 3 || nMonth == 5 || nMonth == 7 || nMonth == 8 || nMonth == 10 || nMonth == 12) ? 31 : 30;
for(int i = 1; i <= nMax; i++)
{
strTmp1.Format("%.2d", i);
m_Day.AddString(strTmp1 + "日");
strTmp2.Format("%.2d", time.nDay);
if(strTmp1 == strTmp2)
m_Day.SetCurSel(i - 1);
}
}
}
// 當"月份"改變時
void CShuntDownDlg::OnSelchangeComboMonth()
{
TIME time;
GetTime(&time);
char buf[50] = {0};
// 年
::GetDlgItemText(m_hWnd, IDC_COMBO_YEAR, buf, 5);
int nYear = atoi(buf);
// 月
memset(buf, 0, 50);
::GetDlgItemText(m_hWnd, IDC_COMBO_MONTH, buf, 3);
int nMonth = atoi(buf);
CString strTmp1, strTmp2 = "";
// 日
for(int i = m_Day.GetCount() - 1 ; i >= 0; i--)
m_Day.DeleteString(m_Day.GetCount() - 1);
if(nMonth == 2)
{
if(IsRYear(nYear))
{
for(int i = 1; i <= 28; i++)
{
strTmp1.Format("%.2d", i);
m_Day.AddString(strTmp1 + "日");
strTmp2.Format("%.2d", time.nDay);
if(strTmp1 == strTmp2)
m_Day.SetCurSel(i - 1);
}
}
else
{
for(int i = 1; i <= 29; i++)
{
strTmp1.Format("%.2d", i);
m_Day.AddString(strTmp1 + "日");
strTmp2.Format("%.2d", time.nDay);
if(strTmp1 == strTmp2)
m_Day.SetCurSel(i - 1);
}
}
}
else
{
int nMax = (nMonth == 1 || nMonth == 3 || nMonth == 5 || nMonth == 7 || nMonth == 8 || nMonth == 10 || nMonth == 12) ? 31 : 30;
for(int i = 1; i <= nMax; i++)
{
strTmp1.Format("%.2d", i);
m_Day.AddString(strTmp1 + "日");
strTmp2.Format("%.2d", time.nDay);
if(strTmp1 == strTmp2)
m_Day.SetCurSel(i - 1);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -