关机、注销、重启的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;

}

这个用的命令看似简单,但是我总感觉在程序的应用中会有限制的,

还没佐证,以后问问经验丰富的人,谁让咱现在菜呢

嘿嘿……

原创粉丝点击