c++实现windows关机

void ShutDown(void)
{
 ShutDown(GetVerInfo());
}

DWORD WINAPI GetVerInfo()
{
 OSVERSIONINFO osver={sizeof(OSVERSIONINFO)};
 GetVersionEx(&osver);
 return osver.dwMajorVersion;
}

void ShutDown(DWORD verInfo)
{
 try
 {
  //如果获取到的系统dwMajorVersion值大于等于5,表示为NT以上操作系统,需提升进程权限
  if(verInfo>=5)
  {
   HANDLE ToHandle;
   TOKEN_PRIVILEGES tkp;
   //打开本进程访问信令
   if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&ToHandle))
   {
    //修改本进程权限
    LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
    tkp.PrivilegeCount=1;
    tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
    //通知系统已修改
    AdjustTokenPrivileges(ToHandle,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
    //获得权限后关闭计算机,要实现注销或重启则对应EWX_LOGOFF,EWX_REBOOT
    ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);
   }
  }
  //否则为98以下,直接调用ExitWindowsEx函数即可
  else
  {
   ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0);
  }
 }
 catch(...)
 {
  //出现任何错误则返回
  TRACE(_T("关机失败,请确认程序是否被拦截或具有管理权限!"));
  return;
 }
}

直接调用ShutDown()就行了。

 

需要注意的是,98以上都要提升进程权限。

控制台程序包含<windows.h>。

 

你可能感兴趣的:(c++实现windows关机)