关机、注销、重启的C++实现 2011.04.22
来源:互联网 发布:linux touch.stmp 编辑:程序博客网 时间:2024/05/21 07:06
#include <Windows.h>
#include <stdio.h>
//使能关机特权函数
BOOL EnableShutdownPrivilege()
{
HANDLE hProcess = NULL;
HANDLE hToken = NULL;
LUID uID = {0};
TOKEN_PRIVILEGES stToken_Privileges = {0};
hProcess = ::GetCurrentProcess(); //获取当前应用程序进程句柄
if(!::OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken)) //打开当前进程的访问令牌句柄(OpenProcessToken函数调用失败返回值为零)
return FALSE;
if(!::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&uID)) //获取权限名称为"SeShutdownPrivilege"的LUID(LookupPrivilegeValue函数调用失败返回值为零)
return FALSE;
stToken_Privileges.PrivilegeCount = 1; //欲调整的权限个数
stToken_Privileges.Privileges[0].Luid = uID; //权限的LUID
stToken_Privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //权限的属性,SE_PRIVILEGE_ENABLED为使能该权限
if(!::AdjustTokenPrivileges(hToken,FALSE,&stToken_Privileges,sizeof stToken_Privileges,NULL,NULL)) //调整访问令牌里的指定权限(AdjustTokenPrivileges函数调用失败返回值为零)
return FALSE;
if(::GetLastError() != ERROR_SUCCESS) //查看权限是否调整成功
return FALSE;
::CloseHandle(hToken);
return TRUE;
}
//关机函数
BOOL Shutdown(BOOL bForce)
{
EnableShutdownPrivilege(); //使能关机特权函数
if(bForce)
return ::ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0); //强制关机
else
return ::ExitWindowsEx(EWX_SHUTDOWN,0);
}
//注销函数
BOOL Logoff(BOOL bForce)
{
if(bForce)
return ::ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,0); //强制注销
else
return ::ExitWindowsEx(EWX_LOGOFF,0);
}
//重启函数
BOOL Reboot(BOOL bForce)
{
EnableShutdownPrivilege(); //使能关机特权函数
if(bForce)
return ::ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0); //强制重启
else
return ::ExitWindowsEx(EWX_REBOOT,0);
}
int main()
{
printf("please input you choice: 1/2/3:/n");
int i;
scanf("%d", &i);
switch (i)
{
case 1:
Logoff(TRUE);//注销
break;
case 2:
Reboot(TRUE);//重启
break;
case 3:
Shutdown(TRUE);//关机
break;
default:
break;
}
//Logoff(FALSE); //注销
//Reboot(FALSE); //重启
//Shutdown(FALSE); //关机
return 0;
}
网上搜来的一篇文章,注释什么的都写得挺详细。
后来看资料,直接用命令,我把上面的实现重写了一下。
不知道在应用中会不会有什么限制:
#include <iostream>
using namespace std;
int main()
{
printf("please enter your choice:/n1.注销/n2.关机/n3.重启/n");
int i;
cin>>i;
switch (i)
{
case 1:
system("shutdown -l");
break;
case 2:
system("shutdown -s");
break;
case 3:
system("shutdown -r");
break;
default:
break;
}
return 0;
}
这个用的命令看似简单,但是我总感觉在程序的应用中会有限制的,
还没佐证,以后问问经验丰富的人,谁让咱现在菜呢
嘿嘿……
- 关机、注销、重启的C++实现 2011.04.22
- .NET中实现"关机/休眠/重启/注销"的类
- C++ 实现系统注销,重启,关机的方法
- MFC中定时关机、重启、注销的实现
- 注册表实现windows系统的关机、注销和重启
- MFC中定时关机、重启、注销的实现
- C++ 实现系统注销,重启,关机的方法
- 编程实现Windows关机、重启、注销
- C#实现PC关机,注销,重启
- vc 实现关机 重启 注销
- 实现关机注销重启函数
- C# 实现 Windows 关机 重启 注销
- 关机 重启 注销
- 注销 关机 重启
- 关机休眠重启注销的类
- Ubuntu 的关机重启与注销
- 控制系统关机,重启,注销
- linux注销、关机、重启
- sicily 1625 Binary Clock
- jsp通过href跳转到servlet的乱码问题
- Struts2.1.6中关于JSON的配置和使用
- C++ 在 Linux下编译动态链接库
- 点评我接触的各种编程语言
- 关机、注销、重启的C++实现 2011.04.22
- vs2008安装失败解决办法
- 解决IE8将“在页面中选中一段文字”误认为是Onclick 事件
- Sql 行列转换 动态Sql(Pivot)
- Work queue 详解 (ZZ)
- c#如何操作excel ?
- may not respond to
- js不重复导入
- js innerHTML outerHTML innerText