大家帮我看看,为什么下面的不能实现关机啊,我是windows2000
  procedure TForm1.Button1Click(Sender: TObject);
 const
EWX_FORCE=4; //关闭所有程序并以其他用户身份登录
EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式
EWX_REBOOT=2; //重新启动计算机
EWX_SHUTDOWN=1;//关闭计算机
begin
  ExitWindowsEx(EWX_SHUTDOWN,0);
end;

解决方案 »

  1.   

    windows2000要先获取关机权限。
      

  2.   

    这应该只能用在WIN9X中吧,windows2000等应该要取得权限的
      

  3.   

    尽说废话,解决问题的就没有,晕,csdn竟然没落到这种地步。
      

  4.   

    function TTimeForm.WinExitInNT(iFlags: Integer ): Boolean;
    begin
     Result := True;
     if (SetPrivilege('SeShutdownPrivilege',True)) then
     begin
       if(not ExitWindowsEx(iFlags,0))then
       begin
         Result := False;
       end;
       SetPrivilege('SeShutdownPrivilege',False)
     end else begin
       Result := False;
     end;
    end;function TTimeForm.SetPrivilege(sPrivilegeName: string; bEnabled: Boolean): Boolean;
    var
     TPPrev,TP: TTokenPrivileges;
     Token: THandle;
     dwRetLen: DWord;
    begin
     Result := False;
     OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,Token);
     TP.PrivilegeCount := 1;
     if( LookupPrivilegeValue(Nil,PChar(sPrivilegeName),TP.Privileges[ 0 ].LUID )) then
     begin
       if(bEnabled) then
       begin
         TP.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
       end else begin 
         TP.Privileges[ 0 ].Attributes := 0;
       end;
       dwRetLen := 0;
       Result := AdjustTokenPrivileges(Token,False,TP,SizeOf( TPPrev ),TPPrev,dwRetLen);
     end;
     CloseHandle(Token );
    end;
    if TeThemeRadioButton1.Checked then
      WinExitInNT(EWX_SHUTDOWN);
    if TeThemeRadioButton2.Checked then
      WinExitInNT(EWX_REBOOT);原作者lukecjh