实现这一功能很简单,主要需要调用一个系统API
ExitWindowsEx
功能就是,注销当前用户,关闭系统,或者重新启动系统。
它会发送一个WM_QUERYENDSESSION消息给所有的应用程序,让他们决定是不是可以被关闭。
函数原型
第一个参数是关闭类型,第二个是关闭的原因
第一个参数可以是:
EWX_LOGOFF
0
EWX_POWEROFF
0x00000008
EWX_REBOOT
0x00000002
EWX_RESTARTAPPS
0x00000040
EWX_SHUTDOWN
0x00000001
EWX_FORCE
0x00000004 包含这个参数可以让系统强制关机,可能会让应用程序丢失数据
EWX_FORCEIFHUNG
0x00000010
返回值:
成功的话返回非0值,失败返回0
可以通过GetLastError()获得更多错误信息。
除了了解这个函数以外,我们还应该清楚:
对于windows NT以上版本的操作系统,我们需要提升一个SE_SHUTDOWN权限,才能完成关机的操作。
NT一下的则不需要,例如95,98,ME
NT以上的系统包括:
Microsoft Windows 2000 (Windows NT 5.0) (1999) (2000-2010)
Microsoft Windows XP (Windows NT 5.1) (2001-2014)
Microsoft Windows Server 2003 (Windows NT 5.2) (2003-2015)
Microsoft Windows Server 2003 R2 (Windows NT 5.2) (2006-2015)
Microsoft Windows Vista (Windows NT 6.0) (2006-2017)
Microsoft Windows Server 2008 (Windows NT 6.0) (2008-2018)
Microsoft Windows 7 (Windows NT 6.1) (2009-2020)
下面我们开始具体实现:
关机功能实现
1.检查系统版本,看是不是NT以上,如果是则要提升权限
2.调用系统API,ExitWindowsEx。
提升权限的代码:
调用方法:
大家测试的时候一定要在虚拟机上测试,不然一运行系统熄火了岂不是很郁闷!
方法二:
#include <iostream>
#include <string>
using
namespace
std;
void
print()
{
system
(
"CLS"
);
system
(
"title C++ 关机程序"
);
//设置cmd窗口标题
system
(
"mode con cols=52 lines=17"
);
//窗口宽度高度
system
(
"color 8f"
);
cout <<
" ╔═══════════════════════╗\n"
<<
" ║ C++ 关机程序 ║\n"
<<
" ║ 请输入: ║\n"
<<
" ║ 1.实现定时关闭计算机 ║\n"
<<
" ║ 2.立即关闭计算机 ║\n"
<<
" ║ 3.注销计算机 ║\n"
<<
" ║ 4.重新启动计算机 ║\n"
<<
" ║ 5.取消关机或注销操作(留意右下角提示) ║\n"
<<
" ║ 0.退出系统(当然直接关闭是一样的) ║\n"
<<
" ║ ※制作人:中山大学软件学院钟嘉聪※ ║\n"
<<
" ║ ※QQ:172367155※ ║\n"
<<
" ╚═══════════════════════╝\n"
;
}
int
main()
{
string c;
char
cmds[ 25 ] =
"shutdown -s -t 000000000"
;
print();
cin >> c;
while
( c !=
"0"
)
{
while
( c ==
"1"
)
{
int
num;
cout <<
"Please enter the time: "
<< endl;
cin >> num;
for
(
int
i = 0; i < 9; i++ )
{
cmds[ 23 - i ] =
static_cast
<
char
>( num % 10 + 48 );
num = num / 10;
}
system
( cmds );
break
;
}
while
( c ==
"2"
)
{
system
(
"shutdown -p"
);
break
;
}
while
( c ==
"3"
)
{
system
(
"shutdown -l"
);
break
;
}
while
( c ==
"4"
)
{
system
(
"shutdown -r -t 0"
);
break
;
}
while
( c ==
"5"
)
{
system
(
"shutdown -a"
);
break
;
}
print();
cin >> c;
}
return
0;
}