我是靠谱客的博主 玩命大碗,最近开发中收集的这篇文章主要介绍C++实现windows注销、关机和重启等操作一、方法一:利用系统注册表实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、方法一:利用系统注册表实现

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注销、关机和重启等操作一、方法一:利用系统注册表实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部