问题是在2000下ExitWindowsEx好象没有效果
谢了 那位大哥给个代码

解决方案 »

  1.   

    控制WINDOWS的开关:如关闭WINDOWS,重新启动WINDOWS等,ExitWindowsEx(UINT uFlags,DWORD dwReserved);是实现这一功能的API函数。首先定义常数constEWX_FORCE=4;//关闭所有程序并以其他用户身份登录EWX_LOGOFF=0;//重新启动计算机并切换到MS-DOS方式EWX_REBOOT=2;//重新启动计算机EWX_SHUTDOWN=1;//关闭计算机运行时给How赋值,让他等于EWX_SHUTDOWN或其他,调用以下语句:ExitWindowsEx(How,0);就可以达到目的。 
      

  2.   

    设置权限
    function SetPrivilege(sPrivilegeName:string;bEnabled:boolean):boolean;
    var
      TP,TPPre:TTokenPrivileges;
      Token:THandle;
      dwLength:DWORD;
    begin
      result := false;
      OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,Token);
      try
      TP.PrivilegeCount := 1;
      if LookupPrivilegeValue(nil,PChar(sPrivilegeName),TP.Privileges[0].LUID) then
      begin
        if bEnabled then
          TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
        else
          TP.Privileges[0].Attributes := 0;
        dwLength := 0;
        Result := AdjustTokenPrivileges(Token,false,TP,sizeof(TPPre),TPPre,dwLength);
      end;
      finally
        CloseHandle(Token);
      end;
    end;
    调用:
        SetPrivilege('SeShutdownPrivilege',true);
        ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE or EWX_POWEROFF,0);