一、方法一:利用系统注册表实现
1.在命令行输入 regedit 即可查看系统注册表
2.系统注册表目录说明
3.实现代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110/************************** * 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.实验代码如下所示:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67#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注销、关机和重启等操作一、方法一内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复