怎么做定时关机,或是重新启动啊

解决方案 »

  1.   

    参考Delphi5(6)开发指南。里面专门讲到这个事。
      

  2.   

    Procedure ExitWindows(Flags: Integer); 
      var 
        Handle : THandle; 
        TokenPrivileges : TTokenPrivileges; 
        Size : Cardinal; 
      Begin 
        If not(OpenProcessToken(GetCurrentProcess,TOKEN_WRITE,Handle)) Then 
           RaiseLastOSError; 
        If not(LookupPrivilegeValue(nil, 'SeShutdownPrivilege', TokenPrivileges.Privileges[0].Luid)) Then 
           RaiseLastOSError; 
        TokenPrivileges.PrivilegeCount := 1; 
        TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; 
        If not(AdjustTokenPrivileges(Handle,False,TokenPrivileges,0,nil,Size)) Then 
           RaiseLastOSError; 
        If not(ExitWindowsEx(Flags,0)) Then 
           RaiseLastOSError; 
      End;     ExitWindows(EWX_POWEROFF or EWX_SHUTDOWN);  //关机
        ExitWindows(EWX_REBOOT or EWX_FORCE);  //重起定时用timer
      

  3.   

    下面是伪代码,需要使用TTimerprocedure Timer1Timer (Sender: TObject)
    begin
        GetLocalTime (&t);
        if (t.Hour=HourOf(Now)) and (t.Minute=MinuteOf(Now)) and (t.Second=SecondOf(Now)) then begin
               // 如果是winnt系统,在这里adjust token privillege
               ExitWindowsEx (...//这里是参数,使用什么参数请参考MSDN);
       end;
    end;
      

  4.   

    //--重启动
          if Win32Platform <> VER_PLATFORM_WIN32_NT then //不是NT
            ExitWindowsEx(EWX_REBOOT, 0)
          else
          begin
               SetPrivilege('SeShutdownPrivilege', True);
                 if not ExitWindowsEx(EWX_REBOOT + EWX_FORCE, 0) then
                   SetPrivilege('SeShutdownPrivilege', False);
          end;     //--关机
          if Win32Platform <> VER_PLATFORM_WIN32_NT then //不是NT
            ShellExecute(handle, 'open', 'RUNDLL32.EXE', 'user.exe,ExitWindows', nil, SW_ShowNormal)
          else
          begin
               SetPrivilege('SeShutdownPrivilege', True);
                 if not ExitWindowsEx(EWX_SHUTDOWN + EWX_FORCE, 0) then
                   SetPrivilege('SeShutdownPrivilege', False);
          end;