概述
一、方法一:利用系统注册表实现
1.在命令行输入 regedit 即可查看系统注册表
2.系统注册表目录说明
3.实现代码
/**************************
* C++实现Windows关机,注销,重启
* 开发工具 Visual Studio
* 开发者:summer
* 开发时间:2019.05.18
* **************************/
#include <iostream>
#include <windows.h>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <conio.h>
#include <ctype.h>
using namespace std;
//提升进程权限
bool improvePv()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//打开当前进程的权限令牌
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
return false;
//获得某一特定权限的权限标识LUID,保存在tkp中
//查看里面的权限
//第一个参数:NULL表示要查看的是当前本地系统
//第二个参数:指定特权名称
//第三个参数:用来接收返回的特权名称信息
if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid))
return false;
//设置特权数组的个数
tkp.PrivilegeCount = 1;
//SE_PRIVILEGE_ENABLE_BY_DEFAULT 特权默认启动
//SE_PRIVILEGE_ENABLED 特权启动
//SE_PRIVILEGE_USER_FOR_ACCESS 用来访问一个对象或者服务
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //特权启动
//调用AdjustTokenPrivileges来提升我们需要的系统权限
//修改令牌的权限
//第一个参数:调整特权的句柄
//第二个参数:禁止所有权限表示
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, NULL, NULL, NULL))
return false;
return true;
}
//关机
bool powerOffProc()
{
if (!improvePv() || !ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, SHTDN_REASON_MAJOR_APPLICATION))
return false;
return true;
}
//注销
bool logOffProc()
{
if (!improvePv() || !ExitWindowsEx(EWX_LOGOFF | EWX_FORCE, SHTDN_REASON_MAJOR_APPLICATION))
return false;
return true;
}
//重启
bool reBootProc()
{
if (!improvePv() || !ExitWindowsEx(EWX_REBOOT | EWX_FORCE, SHTDN_REASON_MAJOR_APPLICATION))
return false;
return true;
}
int main(void)
{
char ch;
printf("******************************************n*n");
printf("* 1. Power_Offn*n");
printf("* 2. Log_Offn*n");
printf("* 3. ReBootn*n");
printf("******************************************n");
ch = getch();
while (1){
switch (ch){
case '1':
if (!powerOffProc()){
printf("Process Error!n");
continue;
}
return 0;
case '2':
if (!logOffProc()){
printf("Process Error!n");
continue;
}
return 0;
case '3':
if (!reBootProc()){
printf("Process Error!n");
continue;
}
return 0;
default:
printf("Error!n");
}
}
system("pause");
return 0;
}
4.运行演示,用户输入相关数字即可进行相关操作。
二、方法二:利用windows系统自带命令实现
1.实验代码如下所示:
#include <iostream>
#include <string>
using namespace std;
void print()
{
system( "CLS" );
system( "title C++ 关机程序" ); //设置cmd窗口标题
system( "mode con cols=52 lines=17" ); //窗口宽度高度
cout << " **********************************************n"
<< " * C++实现win开始菜单 *n"
<< " **********************************************n"
<< " * 1.实现定时关闭计算机 *n"
<< " * 2.立即关闭计算机 *n"
<< " * 3.注销计算机 *n"
<< " * 4.重新启动计算机 *n"
<< " * 5.取消关机或注销操作(留意右下角提示) *n"
<< " * 0.退出系统 *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;
}
2.运行效果:
参考文章:【1】C/C++控制Windows关机/注销/重启的正确姿势
【2】C++ 实现系统注销,重启,关机的方法
【3】源码:C++实现windows注销、关机和重启等操作
最后
以上就是玩命大碗为你收集整理的C++实现windows注销、关机和重启等操作一、方法一:利用系统注册表实现的全部内容,希望文章能够帮你解决C++实现windows注销、关机和重启等操作一、方法一:利用系统注册表实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复