#include
#include
#include
#include
//一般在头文件中定义
#define IDB_BNT1 1
#define IDE_EDIT1 2
#define IDE_EDIT2 3
#define IDE_EDIT3 4
HWND
hbunt; //按钮句柄
HWND hedit1, hedit2, hedit3; //文本框句柄变量声明
HWND
hstatic1; //静态文本句柄变量声明
int ret =
0; //保存定时器的返回值
bool isClick = false;
//窗口过程函数的声明
//如果窗口过程函数的定义在WinMain函数之前的话,则该声明可以不写
LRESULT CALLBACK shutdownProc(HWND,UINT,WPARAM,LPARAM);
//windows 程序入口函数,类似c中的main函数
int WINAPI WinMain(
HINSTANCE
hInstance, // handle to current instance
HINSTANCE hPrevInstance, //
handle to previous instance
LPSTR
lpCmdLine, // command line
int
nCmdShow // show state
)
{
HWND
hwnd; //窗口句柄变量
MSG
msg; //消息结构体变量
WNDCLASS
wndclass; //类结构体的声明
//设计自己的窗口类
wndclass.cbClsExtra = 0; //一般设置为0
wndclass.cbWndExtra = 0; //一般设置为0
wndclass.hbrBackground =
(HBRUSH)GetStockObject(WHITE_BRUSH); //设置窗口背景色为白色
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
//设置光标在窗口中的样子,设置为十字形
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
//设置窗口的顶部图标,默认应用程序的图标
wndclass.hInstance = hInstance;
//应用程序的实例句柄,使用WinMain的参数填充
wndclass.lpfnWndProc = shutdownProc;
//设置窗口的处理过程函数
wndclass.lpszClassName = "myclass";
//设置设计的窗口类名称,注册窗口时使用它
wndclass.lpszMenuName = NULL;
//设置窗口的菜单,我们不需要设置为NULL空
wndclass.style = 0; //设置窗口类样式,默认窗口样子
//注册设计好的窗口类到系统
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
//创建窗口
hwnd = CreateWindow("myclass", TEXT("自动关机程序"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
//窗口左上角坐标值为缺省值
300, 120, //窗口的高和宽为缺省值
NULL, //此窗口无父窗口
NULL, //此窗口无子菜单
hInstance, //创建此窗口的应用程序的当前句柄
NULL //不使用该值
);
//让窗口的最大化失效
DWORD dwStyle = GetWindowLong(hwnd,
GWL_STYLE);
dwStyle &= ~(WS_MAXIMIZEBOX |
WS_SIZEBOX);
SetWindowLong(hwnd, GWL_STYLE, dwStyle);
//向窗口添加一个按钮
hbunt = CreateWindow(TEXT("BUTTON"), TEXT("确定"),
BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,
240, 30, //按钮左上角的位置
38, 23, //按钮的高和宽
hwnd, //此按钮的父窗口
(HMENU)IDB_BNT1, //此按钮的ID
hInstance,
//创建此按钮的应用程序的当前句柄
NULL //不使用该值
);
//向窗口添加静态文本内容
hstatic1 = CreateWindow(TEXT("STATIC"),
TEXT("倒计时:"),
WS_CHILD | WS_VISIBLE,
5, 30, 70, 20,
hwnd,NULL,hInstance,NULL
);
//向窗口添加三个文本框
hedit1 = CreateWindow(TEXT("EDIT"), NULL,
WS_CHILD | WS_VISIBLE |
WS_BORDER | ES_LEFT | ES_NOHIDESEL,
90, 30, //编辑框左上角的位置
40, 22, //编辑框的高和宽
hwnd, //此编辑框的父窗口
(HMENU)IDE_EDIT1, //此编辑框的ID
hInstance,
//创建此编辑框的应用程序的当前句柄
NULL //不使用该值
);
hedit2 = CreateWindow(TEXT("EDIT"), NULL,
WS_CHILD | WS_VISIBLE |
WS_BORDER | ES_LEFT | ES_NOHIDESEL,
140, 30, //编辑框左上角的位置
40, 22, //编辑框的高和宽
hwnd, //此编辑框的父窗口
(HMENU)IDE_EDIT2, //此编辑框的ID
hInstance,
//创建此编辑框的应用程序的当前句柄
NULL //不使用该值
);
hedit3 = CreateWindow(TEXT("EDIT"), NULL,
WS_CHILD | WS_VISIBLE |
WS_BORDER | ES_LEFT | ES_NOHIDESEL,
190, 30, //编辑框左上角的位置
40, 22, //编辑框的高和宽
hwnd, //此编辑框的父窗口
(HMENU)IDE_EDIT3, //此编辑框的ID
hInstance,
//创建此编辑框的应用程序的当前句柄
NULL //不使用该值
);
//获取配置文件的相关信息
FILE *in;
TCHAR cini[9];
if ((in = fopen("shutdown.ini", "r")) ==
NULL)
{
MessageBox(hwnd,
TEXT("打开配置文件shutdown.ini失败\n文件可能不存在系统将自动创建它"),
TEXT("WARNING"),
MB_OK | MB_ICONWARNING);
SetDlgItemText(hwnd, IDE_EDIT1,
TEXT("00"));
SetDlgItemText(hwnd, IDE_EDIT2,
TEXT("00"));
SetDlgItemText(hwnd, IDE_EDIT3,
TEXT("00"));
}
else
{
fgets(cini, 9, in);
fclose(in);
TCHAR editc1[3];
TCHAR editc2[3];
TCHAR editc3[3];
wsprintf(editc1, "%c%c",
cini[0], cini[1]);
wsprintf(editc2, "%c%c",
cini[3], cini[4]);
wsprintf(editc3, "%c%c",
cini[6], cini[7]);
SetDlgItemText(hwnd, IDE_EDIT1,
TEXT(editc1));
SetDlgItemText(hwnd, IDE_EDIT2,
TEXT(editc2));
SetDlgItemText(hwnd, IDE_EDIT3,
TEXT(editc3));
fclose(in);
}
//显示更新窗口
ShowWindow(hwnd, SW_SHOWNORMAL); //设置正常显示
UpdateWindow(hwnd);
//消息循环
while(GetMessage(&msg, NULL, 0, 0))
{
//消息转化
TranslateMessage(&msg);
//消息分发
DispatchMessage(&msg);
}
//消息循环结束
即程序结束时 将信息返回系统
return
msg.wParam;
}
//窗口过程函数的定义
LRESULT CALLBACK shutdownProc(HWND hwnd,UINT message,WPARAM
wParam,
LPARAM lParam)
{
switch(message)
{
case WM_CREATE :
ret =
SetTimer(hwnd, 10, 1000, NULL);
break;
case WM_COMMAND :
if(IDB_BNT1
== (int)LOWORD(wParam))
{
isClick
= true;
ret
= SetTimer(hwnd, 10, 1000, NULL);
//如果是点击确定按钮
TCHAR
editc1[3];
TCHAR
editc2[3];
TCHAR
editc3[3];
int
editi1 = 0;
int
editi2 = 0;
int
editi3 = 0;
GetDlgItemText(hwnd,
IDE_EDIT1, editc1, 3);
GetDlgItemText(hwnd,
IDE_EDIT2, editc2, 3);
GetDlgItemText(hwnd,
IDE_EDIT3, editc3, 3);
sscanf(editc1,
"%d", &editi1);
sscanf(editc2,
"%d", &editi2);
sscanf(editc3,
"%d", &editi3);
editi1
>= 10 ? wsprintf(editc1, "%d", editi1) :
wsprintf(editc1, "%d%d", 0, editi1);
editi2
>= 10 ? wsprintf(editc2, "%d", editi2) :
wsprintf(editc2, "%d%d", 0, editi2);
editi3
>= 10 ? wsprintf(editc3, "%d", editi3) :
wsprintf(editc3, "%d%d", 0, editi3);
FILE
*in;
TCHAR
cini2[9];
in
= fopen("shutdown.ini", "w");
wsprintf(cini2,
"%s,%s,%s", editc1, editc2, editc3);
fputs(cini2,
in);
fclose(in);
//判断时间
if(editi1
== 0 && editi2 == 0
&& editi3 == 0)
{
//关闭计算机
if(ret
!= 0)
{
KillTimer(hwnd,
10);
}
system("shutdown
-s -f -t 0");
}
SetDlgItemText(hwnd,
IDE_EDIT1, TEXT(editc1));
SetDlgItemText(hwnd,
IDE_EDIT2, TEXT(editc2));
SetDlgItemText(hwnd,
IDE_EDIT3, TEXT(editc3));
}
return
0;
case WM_TIMER :
if(isClick)
{
//判断时间
TCHAR
editc1[3];
TCHAR
editc2[3];
TCHAR
editc3[3];
int
editi11,editi22,editi33;
GetDlgItemText(hwnd,
IDE_EDIT1, editc1, 3);
GetDlgItemText(hwnd,
IDE_EDIT2, editc2, 3);
GetDlgItemText(hwnd,
IDE_EDIT3, editc3, 3);
sscanf(editc1,
"%d", &editi11);
sscanf(editc2,
"%d", &editi22);
sscanf(editc3,
"%d", &editi33);
if(editi33
<= 0)
{
if(editi22
<= 0)
{
if(editi11
<= 0)
{
editi33
= editi22 = editi11 = 0;
KillTimer(hwnd,
10);
}
else
{
editi11--;
editi22
= 59;
editi33
= 59;
}
}
else
{
editi22--;
editi33
= 59;
}
}
else
{
editi33--;
}
editi11
>= 10 ? wsprintf(editc1, "%d", editi11) :
wsprintf(editc1, "%d%d", 0, editi11);
editi22
>= 10 ? wsprintf(editc2, "%d", editi22) :
wsprintf(editc2, "%d%d", 0, editi22);
editi33
>= 10 ? wsprintf(editc3, "%d", editi33) :
wsprintf(editc3, "%d%d", 0, editi33);
SetDlgItemText(hwnd,
IDE_EDIT1, TEXT(editc1));
SetDlgItemText(hwnd,
IDE_EDIT2, TEXT(editc2));
SetDlgItemText(hwnd,
IDE_EDIT3, TEXT(editc3));
if(editi11
== 0 && editi22 == 0
&& editi33 == 0)
{
//关闭计算机
if(ret
!= 0)
{
KillTimer(hwnd,
10);
}
system("shutdown
-s -f -t 0");
}
UpdateWindow(hwnd);
}
return
0;
case WM_DESTROY :
PostQuitMessage(0);
default :
//缺省时采用系统消息缺省处理函数
return DefWindowProc(hwnd, message, wParam, lParam);
}
return
0;
}