C++ 让电脑关机,重启,注销

简介: C++ 让电脑关机,重启,注销

代码


#include <windows.h>
#include <iostream>
#include <string.h>
using namespace std;
//功能实现  
BOOL ReSetWindows(DWORD dwFlags, BOOL bForce)
{
  //检查参数是否正确  
  if (dwFlags != EWX_LOGOFF && dwFlags != EWX_REBOOT && dwFlags != EWX_SHUTDOWN)
    return FALSE;
  //获得系统的版本信息,让我们后面确定是否需要提升系统权限  
  OSVERSIONINFO osvi = { 0 };
  //获得参数的大小,以提供给GetVersionEx来判断这是一个新版本的OSVERSIONINFO,还是旧版本的  
  //新版本是OSVERSIONINFOEX。扩充版本  
  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  //if (!GetVersionExA(&osvi))
  //{
  //  return FALSE;
  //}
  //检查操作系统的版本,如果是NT类型的系统,需要提升系统权限  
  if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
  {
    //EnableShutDownPriv();  
  }
  //判断是否是强制关机,强制关闭系统进程。  
  dwFlags |= (bForce != FALSE) ? EWX_FORCE : EWX_FORCEIFHUNG;
  //调用API  
  return ExitWindowsEx(dwFlags, 0);
}
//用来提升系统权限
//这是一个通用的提升权限函数,如果需要提升其他权限  
//更改LookupPrivilegeValue的第二个参数SE_SHUTDOWN_NAME,即可  
BOOL EnableShutDownPriv()
{
  HANDLE hToken = NULL;
  TOKEN_PRIVILEGES tkp = { 0 };
  //打开当前程序的权限令牌  
  if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
  {
    return FALSE;
  }
  //获得某一特定权限的权限标识LUID,保存在tkp中  
  if (!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid))
  {
    CloseHandle(hToken);
    return FALSE;
  }
  tkp.PrivilegeCount = 1;
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  //调用AdjustTokenPrivileges来提升我们需要的系统权限  
  if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
  {
    CloseHandle(hToken);
    return FALSE;
  }
  return TRUE;
}
BOOL Judge(int key)
{
  //调用方法:提升软件系统的权限
  EnableShutDownPriv();
  switch (key)
  {
  case 1001://关机 
    ReSetWindows(EWX_SHUTDOWN, true);
    break;
  case 1002://重启 
    ReSetWindows(EWX_REBOOT, true);
    break;
  case 1003://注销
    ReSetWindows(EWX_LOGOFF, false);
    break;
  }
  return 0;
}
int main(int argc, char *argv[])
{
  char *tmp = argv[0];
  int key = atoi(tmp);
  Judge(key);
}
相关文章
|
1月前
|
C++
C++示例(电脑组装)展现C++多态的优势以及虚函数抽象类的应用
C++示例(电脑组装)展现C++多态的优势以及虚函数抽象类的应用
|
1月前
|
开发框架 监控 安全
电脑内网监控软件的跨平台支持:使用Qt实现的C++代码
在当今数字化时代,对于网络安全的关注越来越高。为了确保企业和个人的网络安全,监控内网活动变得至关重要。本文将介绍一种基于Qt框架实现的C++代码,用于开发跨平台的内网监控软件。
258 0
|
存储 C++
C++多态案例(三)-电脑组装
例描述:** 电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储) 将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商 创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口 测试时组装三台不同的电脑进行工作
130 0
C++多态案例(三)-电脑组装
|
3天前
|
C++
C++一分钟之-类与对象初步
【6月更文挑战第20天】C++的类是对象的蓝图,封装数据和操作。对象是类的实例。关注访问权限、构造析构函数的使用,以及内存管理(深拷贝VS浅拷贝)。示例展示了如何创建和使用`Point`类对象。通过实践和理解原理,掌握面向对象编程基础。
30 2
C++一分钟之-类与对象初步
|
4天前
|
存储 编译器 C++
|
4天前
|
C++
C++类和类模板——入门
C++类和类模板——入门
10 1
|
6天前
|
数据安全/隐私保护 C++
C++ 中的类是一种用户定义的数据类型,用于表示具有相似特征和行为的对象的模板。
C++ 中的类是一种用户定义的数据类型,用于表示具有相似特征和行为的对象的模板。
|
9天前
|
存储 编译器 C++
【C++初阶】—— 类和对象 (中)
【C++初阶】—— 类和对象 (中)
20 3
|
9天前
|
编译器 C++
【C++初阶】—— 类和对象 (下)
【C++初阶】—— 类和对象 (下)
11 2
|
9天前
|
存储 编译器 C语言
【C++初阶】—— 类和对象 (上)
【C++初阶】—— 类和对象 (上)
14 1