程序功能:实现定时30s后自动关机。在定时过程中,除非在“输入”框中输入“我爱你”,否则计时将一直继续。如下图所示:
在输入“我爱你”,并点击“确定”后,倒计时停止。并弹出对话框。如下图所示:
点击“关闭”,弹出对话框。如下图所示:
30s内如果没有输入任何内容,或输入内容有误,则“确定”“关闭”按钮不起作用。直到最终自动关机。
完整程序为:http://download.csdn.net/detail/wang1051477875/8062191
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
}
return FALSE;
}
int a=30;
void CALLBACK MyTimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime)
{
TCHAR str5[256];
itoa(a,str5,10);
SetDlgItemText(hwnd,IDC_EDITJISHI,str5);
a=a-1;
if(a==-1)
{ KillTimer(hwnd,0);
MessageBox(hwnd,TEXT("开始自动关机!!!"),TEXT("问候"),MB_OK);
TOKEN_PRIVILEGES tp;
HANDLE hToken;
LUID luid;
LPTSTR MachineName=NULL;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken ))
{
// PERR("OpenProcessToken",GetLastError());
return ;
}
if(!LookupPrivilegeValue(MachineName, SE_SHUTDOWN_NAME, &luid))
{
// PERR("LookupPrivilegeValue", GetLastError());
return ;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL, NULL ); //到这里,是取得权限///
ExitWindowsEx(EWX_POWEROFF,EWX_FORCE);
}
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
SetTimer(hwnd,0,1000,MyTimerProc);
return TRUE;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_OK:
{
//system="shutdown -r -t 3600";
TCHAR str1[256];
GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));
TCHAR str2[256]="我爱你";
if(strcmp(str1,str2)==0)
{
KillTimer(hwnd,0);
MessageBox(hwnd,"好吧,我认了,嘿嘿","回答",MB_OK|MB_ICONEXCLAMATION);
}
}
break;
case IDC_CLOSE:
{
TCHAR str1[256];
GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));
TCHAR str2[256]="我爱你";
if(strcmp(str1,str2)==0)
{ KillTimer(hwnd,0);
MessageBox(hwnd,TEXT("你受惊了,现在开始关闭窗口"),TEXT("问候"),MB_OK|MB_ICONEXCLAMATION);
DestroyWindow(hwnd);
}
}
break;
default:
break;
}
}
void Main_OnClose(HWND hwnd)
{
//EndDialog(hwnd, 0);
}