WEB开发网
开发学院软件开发VC 浅谈系统的定时关机 阅读

浅谈系统的定时关机

 2006-07-20 11:38:00 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 在写这个程序之前,我曾看到过别人用SDK写的关机程序,浅谈系统的定时关机,不过他的程序只在WIN9X下有效,在2000中就不行了,请做好保存工作!",// 显示的消息 10,// 关机所需的时间 TRUE, TRUE); //设为TRUE为重起,设为FALSE为关机if(!f

本文示例源代码或素材下载

在写这个程序之前,我曾看到过别人用SDK写的关机程序。不过他的程序只在WIN9X下有效,在2000中就不行了,不能关机只能注销。因为2000属于多用户操作系统,要想关机就要获得权限。在查阅了MSDN后整理出了这个关机程序。 TOKEN_PRIVILEGES tkp;
  HANDLE hToken;
  
    if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
  {
    MessageBox("OpenProcessToken failed!");
  }
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); //获得本地机唯一的标识
  tkp.PrivilegeCount = 1; 
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); //调整获得的权限
  
  if (GetLastError() != ERROR_SUCCESS)
  {
      MessageBox("AdjustTokenPrivileges enable failed!");
  }
    fResult =InitiateSystemShutdown(
       NULL,         // 要关的计算机用户名,可在局域网网中关掉对方的机器,NULL表示关本机
       "由于系统不稳定,WINDOWS将在上面的时间内关机,请做好保存工作!", // 显示的消息
       10,                // 关机所需的时间
       TRUE,                
       TRUE);               //设为TRUE为重起,设为FALSE为关机
    if(!fResult)
    {
       MessageBox("InitiateSystemShutdown failed.");
  }
    tkp.Privileges[0].Attributes = 0;
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0);
    if (GetLastError() != ERROR_SUCCESS)
  {
       MessageBox("AdjustTokenPrivileges disable failed.");
  }
    ExitWindowsEx(EWX_SHUTDOWN,0);   //开始关机
   
图一是程序运行画面:

图一

具体实现细节请查阅源代码。WIN2000 + VC++6.0下通过编译。

Tags:系统 定时 关机

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接